HarmonyOS鸿蒙Next中画中画无法隐藏下方按钮、无法指定窗体大小
HarmonyOS鸿蒙Next中画中画无法隐藏下方按钮、无法指定窗体大小 1、设定指定像素的vp或者px,150、84vp宽高,高宽比符合预期但实际大小不符合。
2、设定直播模板PiPWindow.PiPTemplateType.VIDEO_LIVE/PLAY,中间的暂停/播放按钮不知道怎么隐藏。
3、改用MEETING或CALL类型,如果不填controlGroups,点击画中画自动返回app且自动destory PiP,但我只是希望像LIVE那样单击显示顶部关闭和返回按钮,不想返回app,也不想显示下方暂停按钮。
//templateType: PiPWindow.PiPTemplateType.VIDEO_PLAY,//视频播放,默认左×右返回,下暂停
//templateType: PiPWindow.PiPTemplateType.VIDEO_LIVE,//视频通话,默认左×右返回,下暂停
templateType: PiPWindow.PiPTemplateType.VIDEO_MEETING,//视频会议不填controlGroups,单击时自动返回且自动销毁
//templateType: PiPWindow.PiPTemplateType.VIDEO_CALL,//视频通话不填controlGroups,单击时自动返回且自动销毁
附上官方API-pip
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-pipwindow
更多关于HarmonyOS鸿蒙Next中画中画无法隐藏下方按钮、无法指定窗体大小的实战教程也可以访问 https://www.itying.com/category-93-b0.html
目前画中画窗体大小受限于系统,窗体大小是由系统进行自动判断来进行像素定位,对于无法隐藏下方按钮,因系统的原因,暂时不支持
更多关于HarmonyOS鸿蒙Next中画中画无法隐藏下方按钮、无法指定窗体大小的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
窗口尺寸控制问题
画中画窗口的实际尺寸由系统根据设备特性自动计算,你无法直接指定具体像素值。当前仅能通过updateContentSize方法设置内容比例,系统会根据比例结合屏幕参数自动调整显示尺寸。优先采用比例参数而非固定尺寸:
pipController.updateContentSize(16, 9); // 设置16:9比例
播放/暂停按钮隐藏问题
在VIDEO_LIVE和VIDEO_PLAY模板中,VideoPlayControlGroup的暂停/播放按钮属于必选控件,无法通过参数配置隐藏。
替代方案:建议采用VIDEO_CUSTOM模板并手动实现所有控件—需自行处理交互逻辑与状态同步:
templateType: PiPWindow.PiPTemplateType.VIDEO_CUSTOM,
controlGroups: [ /* 自定义控件组 */ ]
【背景知识】
画中画窗口:该模块提供画中画基础功能,包括判断当前系统是否支持画中画功能,以及创建画中画控制器用于启动或停止画中画等。适用于视频播放、视频通话或视频会议场景下,以小窗(画中画)模式呈现内容。
【参考方案】:
可参考实现画中画效果示例,基于媒体服务和ArkUI的基本能力,实现视频播放、手动和自动拉起画中画、画中画窗口控制视频播放和暂停等功能。
- 整个示例用Navigation构建页面,主页面放置五个可点击视频框,点击之后进入视频播放页面。
- 进入视频播放页面后,有三块区域,最上方的XComponent,中间的画中画控制按钮以及下方的回调信息显示框。
- 点击开启后,应用手动拉起画中画,视频在画中画播放,返回桌面视频依旧画中画播放;点击关闭后,画中画播放的视频返回XComponent播放,同时返回桌面不会拉起画中画。
- 点击自动拉起画中画后,返回桌面时应用自动拉起画中画,视频画中画播放。
- 在播放页面进行画中画播放时,XComponent框会提示当前视频正在以画中画播放。
- 回调信息显示框会显示当前状态,错误原因以及按钮事件和状态,参考:VideoPlay.ets。
1. 关于画中画窗口大小设置不符合预期的问题
回答: 鸿蒙文档中明确指出,画中画窗口的尺寸无法由应用直接指定像素值。系统会根据以下规则自动确定窗口大小:
- 画中画窗口的尺寸由系统根据内容原始宽高比(通过
contentWidth
和contentHeight
配置)和当前屏幕的可用空间自动计算得出,以保证显示比例正确。 - 应用可以通过
defaultWindowSizeType
参数来指定第一次拉起画中画时的默认窗口档位(1为小窗,2为大窗),但最终的物理像素尺寸由系统决定。 - 变更记录 (
changelogs-window.md
) 特别说明:从OpenHarmony 5.0.0.42开始,画中画窗口的基准真实尺寸被固定为大窗的尺寸。小窗的显示效果是通过将大窗尺寸进行缩放实现的,而非两个独立的真实尺寸。因此,您设置的150px
或84vp
等具体值不会生效。
结论与建议:您无法直接指定画中画窗口的绝对大小,但可以通过配置 contentWidth
和 contentHeight
来确保内容有正确的宽高比,并通过 defaultWindowSizeType
来选择首次启动的默认档位。
2. 关于如何隐藏VIDEO_PLAY/VIDEO_LIVE模板中的暂停/播放按钮
回答: 您可以通过 setPiPControlEnabled
接口来禁用(隐藏)指定的控件。
- 关键接口:
pipController.setPiPControlEnabled(controlType: PiPControlType, enabled: boolean)
- 对于VIDEO_PLAY和VIDEO_LIVE模板,要隐藏中间的暂停/播放按钮,其对应的
PiPControlType
是VIDEO_PLAY_PAUSE
。 - 将此控件的
enabled
参数设置为false
即可将其禁用并隐藏。
示例代码:
import { PiPWindow } from '@kit.ArkUI';
// 假设 pipController 是您已创建的画中画控制器实例
let controlType: PiPWindow.PiPControlType = PiPWindow.PiPControlType.VIDEO_PLAY_PAUSE;
this.pipController.setPiPControlEnabled(controlType, false); // 禁用并隐藏播放/暂停按钮
注意:此操作是动态的,您可以在画中画启动后的任何时间点调用此接口来更新控件的显示状态。
3. 关于VIDEO_MEETING/VIDEO_CALL模板的行为差异问题
回答: 文档明确说明了不同模板的默认行为,您遇到的情况是符合设计的:
-
默认行为差异:
VIDEO_PLAY
/VIDEO_LIVE
:默认交互是单击窗口会显示顶部控制栏(包含关闭和返回按钮)。VIDEO_MEETING
/VIDEO_CALL
:默认交互是单击窗口会执行操作(如挂断电话、退出会议),并自动退出画中画模式返回应用。这是由视频会议和通话的业务逻辑决定的。
-
如何配置控件:
- 对于
VIDEO_MEETING
和VIDEO_CALL
模板,您必须通过controlGroups
参数来配置您希望显示的控件组。如果您不配置(即不传入该参数),系统会采用默认操作(如单击即挂断/退出)。 - 例如,如果您希望在会议模板中显示挂断、摄像头切换等按钮,而不是单击就退出,您需要配置
controlGroups
:
- 对于
private config: PiPWindow.PiPConfiguration = {
// ... 其他配置
templateType: PiPWindow.PiPTemplateType.VIDEO_MEETING,
controlGroups: [
PiPWindow.VideoMeetingControlGroup.HANG_UP_BUTTON,
PiPWindow.VideoMeetingControlGroup.CAMERA_SWITCH,
// ... 添加其他您需要的控件组
],
};
结论与建议:
- 如果您希望画中画窗口的交互是“单击显示控制栏”,那么应继续使用
VIDEO_PLAY
或VIDEO_LIVE
模板,并使用setPiPControlEnabled
来隐藏您不需要的底部播放按钮。 - 如果您因业务场景必须使用
VIDEO_MEETING
或VIDEO_CALL
模板,则必须正确配置controlGroups
来定义您需要的控件,否则系统将执行其默认的单击操作(挂断/退出)。
总结:
- 窗口大小:无法自定义像素尺寸,由系统根据内容比例和屏幕空间决定。
- 隐藏按钮:对
VIDEO_PLAY
/VIDEO_LIVE
,使用setPiPControlEnabled(PiPControlType.VIDEO_PLAY_PAUSE, false)
。 - 模板行为:
MEETING
/CALL
模板需配置controlGroups
来定义控件,否则单击将执行默认退出操作。若想要“单击显示控制栏”的交互,请使用PLAY
/LIVE
模板。
鸿蒙Next的画中画功能目前存在界面控件限制。下方按钮是系统级安全控件,用于防止误操作和确保基础功能可用性,暂不支持隐藏或自定义。窗体尺寸由系统统一管理,开发者只能使用预设的宽高比例(如1:1、16:9等),无法自由设定具体像素值。这些限制源于鸿蒙分布式架构对窗口一致性和稳定性的要求。相关API目前未开放更底层的窗口控制权限。
针对您提出的HarmonyOS Next画中画功能问题,以下是具体分析:
-
窗体大小设置问题:
使用vp
或px
设置宽高时,系统会根据设备密度自动适配,可能导致实际显示尺寸与设定值有偏差。建议通过PiPWindow.setFixedSize()
方法锁定尺寸,但需注意部分设备可能限制最小/最大尺寸。 -
隐藏播放/暂停按钮:
VIDEO_LIVE
和VIDEO_PLAY
模板默认显示控制按钮,目前API未提供直接隐藏按钮的配置。可尝试通过自定义控制组(controlGroups
)覆盖默认布局,但需自行实现交互逻辑。 -
避免自动返回与销毁:
使用MEETING
或CALL
模板时,若不设置controlGroups
,单击画中画会触发默认行为(返回并销毁)。建议通过以下方式调整:- 明确配置
controlGroups
,即使为空数组,以避免默认行为。 - 监听单击事件并拦截默认处理,手动控制显隐逻辑。
- 明确配置
参考代码调整:
const pipWindow = await pip.createPiPWindow({
templateType: PiPWindow.PiPTemplateType.VIDEO_MEETING,
controlGroups: [] // 显式设置为空数组
});
// 监听事件并自定义行为
pipWindow.on('click', (event) => {
// 自定义显示顶部按钮,不触发返回
});
建议查阅最新API文档确认是否有新增配置项,或关注版本更新中对此类需求的优化。