HarmonyOS 鸿蒙Next Web组件视频全屏实现方法,Web与List混合场景

HarmonyOS 鸿蒙Next Web组件视频全屏实现方法,Web与List混合场景 Web组件里面的视频全屏怎么实现,Web和List混合的

3 回复

import { webview } from ‘@kit.ArkWeb’ import { LengthUnit } from ‘@ohos.arkui.node’ import { common } from ‘@kit.AbilityKit’; import { window } from ‘@kit.ArkUI’;

@Entry @Component struct TestWeb { webviewController: webview.WebviewController = new webview.WebviewController() @State isFullScreen: boolean = false

private changeOrientation(isLandscape: boolean) { let context: common.UIAbilityContext = getContext(this) as common.UIAbilityContext; window.getLastWindow(context).then((lastWindow) => { lastWindow.setPreferredOrientation(isLandscape ? window.Orientation.LANDSCAPE : window.Orientation.PORTRAIT) lastWindow.setWindowLayoutFullScreen(isLandscape ? true : false) }); }

build() { Column() { Text(“测试Web中的视频全屏”) .width(“100%”) .height(44) .visibility(this.isFullScreen ? Visibility.None : Visibility.Visible) .margin({ top: { value: 40, unit: LengthUnit.VP } }) .textAlign(TextAlign.Center)

  Scroll() {
    Column() {
      Web({
        src: "https://tnews.xjmty.com/app/slyapp/sh/202412/t20241226_25794936.html?cid=25794936&sid=149&ctype=article&uid=zx90yUqy3uA",
        controller: this.webviewController,
        renderMode: RenderMode.SYNC_RENDER
      })
      .onFullScreenEnter((event) => {
        console.log("onFullScreenEnter...")
        this.changeOrientation(true);
        this.isFullScreen = true
      })
      .onFullScreenExit(() => {
        console.log("onFullScreenExit...")
        this.changeOrientation(false);
        this.isFullScreen = false
      })
      .width("100%")
      .height("auto_size")
      .javaScriptAccess(true)
      .domStorageAccess(true)
      .cacheMode(CacheMode.Default)

      Text("评论列表")
        .width("100%")
        .height(400)
        .textAlign(TextAlign.Center)
    }
    .alignItems(HorizontalAlign.Start)
    .justifyContent(FlexAlign.Start)
  }
  .layoutWeight(1)

  Row() {
    Text("点赞").fontSize(16)
    Text("收藏").fontSize(16)
    Text("分享").fontSize(16)
  }
  .width("100%")
  .height(60)
  .alignItems(VerticalAlign.Center)
  .justifyContent(FlexAlign.SpaceAround)
  .visibility(this.isFullScreen ? Visibility.None : Visibility.Visible)
}

} }

更多关于HarmonyOS 鸿蒙Next Web组件视频全屏实现方法,Web与List混合场景的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


可以参考官方文档,基于Web页面的视频适配开发实践,里面提到了:

全屏播放视频首先需要Web页面做沉浸式展示,才能保证在进入全屏显示后,视频能够在非安全区展示。具体实现可以参考开发应用沉浸式效果

为解决点击全屏后视频竖屏显示的情况,需要在Web页面进入全屏的事件回调onFullScreenEnter()中,通过手动setPreferredOrientation()接口将屏幕设置为横屏显示。

为保证退出全屏后,页面继续保持正常的竖屏显示,需要在Web页面退出全屏的事件回调onFullScreenExit()中,手动通过setPreferredOrientation()接口将屏幕设置为竖屏显示。

需要注意的是,在页面进入全屏后,需要兼容通过返回手势触发退出全屏的逻辑,具体实现上,需要在触发手势返回的事件回调中,首先判断当前应用是否处于全屏显示,若处于则触发退出全屏,返回手势触发有以下两类。

参考链接:https://developer.huawei.com/consumer/cn/doc/best-practices-V5/bpta-video-adaptation-based-web-V5#section6164167185112

在HarmonyOS鸿蒙系统中,针对Next Web组件实现视频全屏以及处理Web与List混合场景的问题,可以通过以下方式进行操作:

对于视频全屏实现,鸿蒙系统提供了相应的API和组件支持。开发者可以利用鸿蒙系统的媒体播放能力,结合Next Web组件的自定义事件或属性,监听视频播放的全屏请求。当接收到全屏请求时,可以通过调整布局或启动一个新的全屏页面来展示视频内容。这通常涉及到对页面布局的动态调整和视频播放控件的灵活使用。

在处理Web与List混合场景时,需要特别注意页面布局的管理和事件处理的优先级。可以通过使用鸿蒙系统的布局容器(如Stack、ColumnLayout等)来合理组织Web组件和List组件的位置和显示层级。同时,需要确保事件处理逻辑能够正确区分用户是在与Web内容交互还是在操作List组件,以避免事件冲突或误操作。

此外,鸿蒙系统还支持多种UI组件和布局方式,开发者可以根据实际需求选择合适的组件和布局来实现复杂的界面效果。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部