HarmonyOS 鸿蒙Next 如何解决Web组件中的视频无法横屏全屏播放的问题
【问题现象】
HarmonyOS中Web组件加载视频播放的网页,点击全屏播放图标,无法横屏全屏播放。问题现象如下:
【背景知识】
【解决方案】
点击全屏按钮Web组件进入全屏模式时,窗口的横竖屏状态不会主动发生变化,因此需要主动设置窗口方向为横屏。需要监听Web组件进入和退出全屏模式事件,在进入全屏模式时,设置窗口方向为横屏;在退出全屏模式时,设置窗口方向为竖屏。
(1)通过Web组件的onFullScreenEnter() 和 onFullScreenExit()方法,监听Web组件进入和退出全屏模式事件。
代码示例如下:
Web({ src: 'xxx', controller: this.controller })
.onFullScreenEnter((event) => {
console.log("onFullScreenEnter...")
})
.onFullScreenExit(() => {
console.log("onFullScreenExit...")
})
(2)通过Window提供的setPreferredOrientation()方法设置横竖屏。在进入全屏事件监听中,设置窗口方向为横屏,退出全面事件监听中,这种窗口方向为竖屏。
代码示例如下:
// 改变设备横竖屏状态函数
private changeOrientation(isLandscape: boolean) {
// 获取UIAbility实例的上下文信息
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
// 调用该接口手动改变设备横竖屏状态
window.getLastWindow(context).then((lastWindow) => {
lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT)
});
}
最终代码示例如下:
controller: web_webview.WebviewController = new web_webview.WebviewController();
// 改变设备横竖屏状态函数
private changeOrientation(isLandscape: boolean) {
// 获取UIAbility实例的上下文信息
let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext;
// 调用该接口手动改变设备横竖屏状态
window.getLastWindow(context).then((lastWindow) => {
lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT)
});
}
build() {
Column() {
Web({ src: 'https://consumer.huawei.com/content/dam/huawei-cbg-site/cn/mkt/harmonyos-next/videos/1025/harmonyos-next-pv-video-popup.mp4', controller: this.controller })
.javaScriptAccess(true)
.domStorageAccess(true)
.onFullScreenEnter((event) => {
console.log("onFullScreenEnter...")
this.changeOrientation(true);
})
.onFullScreenExit(() => {
console.log("onFullScreenExit...")
this.changeOrientation(false);
})
}.width('100%').height('100%')
}
运行效果:
1 回复
针对HarmonyOS 鸿蒙Next中Web组件的视频无法横屏全屏播放的问题,可尝试以下解决方案:
- 利用媒体查询接口:HarmonyOS提供了媒体查询接口,可以在Web组件的onFullScreenEnter和onFullScreenExit回调中监听全屏状态,并使用媒体查询接口检测设备横屏状态,从而调整页面布局和视频宽高以适应全屏。
- 编程方式控制:通过编程方式,如使用@ohos.multimedia.media组件和@ohos.window接口,可以编写代码控制视频的播放窗口在全屏与非全屏状态之间切换。这包括初始化视频播放器、设置全屏播放动画及调用窗口对象的相关方法。
- 监听窗口尺寸变化:通过监听窗口尺寸的变化,在尺寸变化触发回调函数中执行相应的尺寸修改逻辑,以确保视频在全屏模式下正确显示。
如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html 。