Skip to content

fix(ohos): 适配平板全景多窗下的全屏播放#101

Merged
qinshah merged 2 commits into
qinshah:ohosfrom
wm-develop:fix/issue-92
Jul 14, 2026
Merged

fix(ohos): 适配平板全景多窗下的全屏播放#101
qinshah merged 2 commits into
qinshah:ohosfrom
wm-develop:fix/issue-92

Conversation

@wm-develop

Copy link
Copy Markdown

问题-Issue #92

平板全景多窗(自由窗口)下调整过窗口比例后点击全屏按钮,播放控件比例异常:内容只占窗口的一部分(约为缩放比例),右侧和下方露出大片白底;手动拖动窗口边缘可临时恢复。

原因

  • 小窗横屏全屏时应用会把 ScaledWidgetsFlutterBinding.scaleFactor 切到 0.75,该变化只更新 RenderView 配置(渲染画布的逻辑尺寸),而根 View 的 MediaQuery 数据(physicalSize/dpr 均来自引擎)并不改变。
  • 因此,依赖 MediaQuery 的整棵子树(包括 _builder 里按缩放校正 MediaQuery 的逻辑)不会重建,布局仍按旧逻辑尺寸进行,与画布脱节。手机小窗无此问题,是因为进小窗时窗口尺寸真实变化、引擎 metrics 更新碰巧带来了重建;平板全景多窗内窗口矩形不变,无兜底方案。

修改

  • scale_app.dart / main.dart:新增 scaleFactorNotifier_builderListenableBuilder 监听,缩放变化强制重建 MediaQuery 校正子树(根修复)
  • Index.ets:监听 windowSizeChange/windowRectChange,把窗口尺寸显式绑定到根容器,让 XComponent surface 跟上程序化窗口调整;常规场景下与 '100%' 等价
  • video/view.dart:鸿蒙自由小窗内跳过"非竖屏自动进全屏"启发式——小窗的宽高比不代表设备方向,横屏小窗退出全屏时窗口尚未恢复尺寸,该启发式会立即重进全屏形成退不出去的回环。行为变化:自由窗口内打开自动播放的视频不再因窗口恰为横向比例而自动全屏
  • 装饰栏按钮颜色适配:自由多窗顶部的全屏/最小化/关闭按钮颜色跟随应用颜色模式而非内容,浅色模式下深色按钮叠在播放页黑色顶部上视觉不可见。HarmonyChannel 新增 setDecorButtonDark(原生 setDecorButtonStyle),视频/直播页可见期间切浅色按钮,离开恢复跟随系统

修复自由多窗内点全屏后播放控件比例异常(内容只占窗口一部分、右/下露出大片白底),并连带修复同根因的一系列窗口化显示问题(fix qinshah#92)。

根因:小窗横屏全屏时应用会把 `ScaledWidgetsFlutterBinding.scaleFactor` 切到 0.75,该变化只更新 RenderView 配置(渲染画布的逻辑尺寸),而根 View 的 MediaQuery 数据(physicalSize/dpr 均来自引擎)并不改变,依赖 MediaQuery 的整棵子树——包括 _builder 里按缩放校正 MediaQuery 的逻辑——不会重建。
布局仍按旧逻辑尺寸进行,与画布脱节,内容恰好只占 scale 比例的区域。此前手机小窗不受害,是因为进小窗时窗口尺寸/dpr 恰好真实变化、引擎 metrics 更新碰巧带来了重建;平板全景多窗内窗口矩形不变,无人兜底。

- scale_app.dart / main.dart:新增 `scaleFactorNotifier`,_builder 用 `ListenableBuilder` 监听,缩放变化强制重建 MediaQuery 校正子树
- Index.ets:监听 `windowSizeChange/windowRectChange`,把窗口尺寸显式绑定到根容器,让 `XComponent surface` 跟上程序化窗口调整(如 `enableLandscapeMultiWindow`);常规场景下与 '100%' 等价
- video/view.dart:鸿蒙自由小窗内跳过"非竖屏自动进全屏"启发式——小窗的宽高比不代表设备方向,横屏小窗退出全屏时窗口尚未恢复尺寸,该启发式会立即重进全屏形成退不出去的回环。行为变化:自由窗口内打开自动播放的视频不再因窗口是横向比例而自动全屏
- 装饰栏按钮颜色适配:自由多窗顶部的全屏/最小化/关闭按钮颜色跟随应用颜色模式而非内容,浅色模式下深色按钮叠在播放页黑色顶部上视觉不可见。HarmonyChannel 新增 `setDecorButtonDark`(原生 `setDecorButtonStyle`,@SInCE 14),视频/直播页可见期间以持有者集合方式切浅色按钮,离开恢复跟随系统;持有者集合规避页跳页时生命周期回调顺序的不确定性
@qinshah qinshah merged commit 56760c9 into qinshah:ohos Jul 14, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants