hmos-multidevice-screen-window-size

star 28

Handle HarmonyOS screen and window size adaptation, including breakpoint systems, responsive layouts, GridRow/GridCol usage, window size observation, and multi-device layout changes.

openharmonyinsight By openharmonyinsight schedule Updated 4/28/2026

name: hmos-multidevice-screen-window-size description: Handle HarmonyOS screen and window size adaptation, including breakpoint systems, responsive layouts, GridRow/GridCol usage, window size observation, and multi-device layout changes.

屏幕窗口尺寸适配

技能定义

字段 内容
skill_id screen-window-size
skill_name 屏幕窗口尺寸适配
one_line_purpose 为多设备布局提供断点策略、结构切换策略和窗口监听策略。
device_scope phone / tablet / tv / 2in1
problem_scope 断点体系、响应式布局、窗口变化监听、媒体查询、字体缩放、显示密度
not_in_scope 纯业务逻辑重构、与尺寸无关的视觉微调
primary_outputs primary_scenedevice_constraintscode_touchpointsfix_planverification_matrix

核心约束

  • 先判断问题属于组件级自适应还是页面级响应式,再选方案。
  • 优先复用统一断点体系,不要引入与现有阈值冲突的新断点。
  • 涉及结构切换时,优先使用 GridRowGridCol 或其他响应式容器,而不是零散条件分支。
  • 涉及窗口变化监听时,必须说明监听入口、状态同步和取消监听逻辑。
  • 需要横向窗口或特殊比例支持时,必须说明宽度、纵向断点或高宽比谁是主判定条件。
  • 未给出不同断点下的结构变化和内容取舍前,不得宣称方案完整。
  • FIX 阶段必须先保护单屏基线体验,再处理多屏问题;禁止出现“多屏改善但单屏明显退化”。
  • 针对图片拉伸问题,优先修复“容器约束与渲染模式”的根因,禁止通过人为拉伸系数制造或掩盖问题。
  • 仅修复图片拉伸时,不得通过限制整页主内容宽度制造大面积留白;优先限制目标图片的渲染宽度或容器策略。
  • 涉及字体缩放或显示密度变化时,必须订阅 onConfigurationUpdate 并通过 AppStorage 全局同步,不得遗漏环境变量响应。
  • 涉及 maxFontScale 限制时,必须说明是应用级配置还是组件级属性,以及限制倍数的依据。

Workflow

Input

用户描述一个多设备布局需求(如"适配平板")或布局异常问题(如"折叠屏上布局断裂")。

Process

  1. 判断问题类型:需求设计(REQ)/ 开发实现(DEV)/ Bug 修复(FIX)/ 功能验证(VAL)。
  2. 读取规格(针对REQ):先路由到 SIZE-00,读取多设备适配规格要求。
  3. 场景路由:根据问题特征路由到 SIZE-01~05:
    • 断点 / 响应式布局 / 窗口监听 → SIZE-01
    • 截断 / 留白 / 溢出 / 压缩 → SIZE-02
    • 偏移 / 错位 / 对齐异常 / 层级错乱 → SIZE-03
    • 堆叠 / 遮挡 / 容器选择错误 → SIZE-04
    • 字体缩放 / 显示密度 / 适老化 / 环境变量未同步 → SIZE-05
  4. 读取场景文档:根据匹配到的场景和问题类型(阶段),读取该场景「文件读取」中对应的 reference 和 assets 文件。
  5. 按阶段交付:根据匹配的阶段输出对应契约字段(见「阶段输出契约」)。

Output

按匹配的阶段(REQ/DEV/FIX/VAL)输出对应契约字段。

阶段标签

标签 阶段 当前模块关注点
REQ 需求分析设计 断点边界、设备范围、结构变化原则
DEV 开发 断点状态管理、容器选型、监听落点
FIX 问题修复 断点错配、布局断裂、状态未同步
VAL 功能验证 断点切换证据、窗口变化证据、布局稳定性

统一输出字段

  • 路由字段:active_phasesprimary_phaseprimary_scenesecondary_scenesresources_used
  • REQdevice_constraintscapability_boundaryacceptance_focus
  • DEVcode_touchpointsreuse_resourcesimplementation_notesintegration_risks
  • FIXproblem_profileroot_cause_hypothesisfix_planregression_watchlist
  • VALverification_matrixevidence_requirementspass_criteriaresidual_risks

字段释义

  • device_constraints:指由设备形态、窗口状态、输入方式或系统区域带来的适配硬约束。在 screen-window-size 中,通常是断点范围、主判定维度和不同尺寸下是否发生结构切换。它不是 API 列表,也不是代码修改点。
  • capability_boundary:指当前方案支持到哪里、不支持什么、在哪些设备或窗口条件下需要降级或不处理。
  • acceptance_focus:指需求阶段验收时必须重点确认的现象、证据或边界条件。
  • scene 中 deliverables.REQ 出现 device_constraints,表示“该场景一旦命中,在需求分析阶段必须产出这个字段”,不是对字段再定义一次。

AI 检索要求

  • 所有窗口尺寸适配场景都必须先命中 SIZE-00,读取规格要求。
  • 涉及断点命名、阈值统一、断点错配、GridRow/GridCol、响应式布局、窗口变化监听时,优先命中 SIZE-01
  • 涉及组件截断、留白、尺寸溢出或压缩时,优先命中 SIZE-02
  • 涉及组件偏移、错位、对齐异常或层级错乱时,优先命中 SIZE-03
  • 涉及组件堆叠、遮挡、截断或布局容器选择错误时,优先命中 SIZE-04
  • 涉及字体缩放、显示密度、适老化或环境变量未同步导致布局异常时,优先命中 SIZE-05
  • 涉及应用内分屏(startAbility + StartOptions 启动另一个 UIAbility 分屏显示)时,优先命中 SIZE-06
  • 当请求同时包含"怎么改"和"怎么验"时,设置 active_phases: [DEV, VAL]
  • 出现以下信号时,必须主命中 SIZE-02,并联动 VAL
    • 首图/轮播图/横幅在单屏正常,多屏拉伸或聚焦异常
    • ImageFit.Cover、容器高度、宽屏放大导致内容缺失或裁切
    • component_stretch、图片四周被拉开、中心聚焦失真

资源索引

SIZE-00 多设备窗口适配规格

阶段:REQ | 优先级:P0

适用场景

  • 所有涉及屏幕窗口尺寸适配的需求,必须先进入此场景读取规格要求
  • 需要了解 HarmonyOS 多设备适配的标准规范、设计原则和约束条件

不适用场景

  • 已完成规格分析,直接进入开发或修复阶段(跳过此场景,直接进入 SIZE-01 至 SIZE-05)
  • 纯业务逻辑重构,不涉及窗口尺寸适配

文件读取

REQ 阶段(读取 reference)

  • ./references/adaptation-specification.md - 多设备适配规格要求

DEV 阶段(按最佳实践读取 assets)

  • ./assets/PipWindow.ets ⭐ 推荐方案 - SPEC-05 画中画能力完整示例(PipManager + CustomNodeController + 页面集成)

SIZE-01 多设备适配窗口尺寸布局

阶段:REQ / DEV / FIX | 优先级:P0

适用场景

  • 涉及断点系统设计、阈值定义
  • 使用 GridRow/GridCol 实现响应式布局
  • 需要监听窗口尺寸变化(旋转、折叠、拖拽)
  • 问题:断点不一致、布局未随尺寸变化更新

不适用场景

  • 仅与安全区、键盘、折痕相关
  • 静态布局,不依赖运行时尺寸变化

关键决策

  • 系统断点 vs 自定义断点
  • 宽度/纵向断点/高宽比谁是主判定条件
  • 页面骨架和容器类型(GridRow、Stack、Flex)
  • 窗口监听方式:windowSizeChange / media query
  • 同步粒度和防抖策略

文件读取

REQ 阶段(读取 reference)

  • ./references/breakpoint_system.md - 断点系统设计原理
  • ./references/responsive_layout.md - 四种响应式布局(重复布局、分栏布局、挪移布局、缩进布局)
  • ./references/adaptive_layout.md - 七种自适应能力(拉伸、缩放、隐藏、占比、折行、均分、延伸)
  • ./references/window_size_detection.md - 窗口监听机制

DEV 阶段(按最佳实践读取 assets)

断点系统

  • ./assets/SystemBreakpointExample.ets ⭐ 推荐方案 - 系统断点枚举
  • ./assets/BreakpointConstants.ets - 备选方案 - 自定义断点常量
  • ./assets/BreakpointType.ets - 简化条件渲染
  • ./assets/BreakpointObserver.ets - 断点观察器

响应式布局

  • ./assets/GridRowBreakpoints.ets - GridRow 内置断点
  • ./assets/GridRowExample.ets - 栅格布局示例
  • ./assets/GridColOffset.ets - 栅格偏移配置

窗口监听

  • ./assets/WindowSizeChangeListener.ets ⭐ 推荐方案 - 直接监听窗口尺寸变化
  • ./assets/MediaQueryManager.ets - 媒体查询管理器
  • ./assets/MediaQueryExample.ets - 媒体查询示例

FIX 阶段(读取 reference)

  • ./references/breakpoint_system.md - 断点系统设计原理
  • ./references/adaptive_layout.md - 七种自适应能力(拉伸、缩放、隐藏、占比、折行、均分、延伸)
  • ./references/window_size_detection.md - 窗口监听机制

SIZE-02 尺寸异常修复

阶段:DEV / FIX | 优先级:P1

适用场景

  • 组件宽度/高度在多设备上不适配
  • 问题:截断、留白、溢出、压缩、内容被切掉

不适用场景

  • 仅位置偏移(见 SIZE-03)
  • 布局容器选择错误(见 SIZE-04)

关键决策

  • 问题类型:固定尺寸 / 断点缺失 / 空间竞争
  • 需要调整的尺寸属性和断点分支

图片拉伸专项规则(component_stretch)

根因判断(必须先判断再改)

  • 若“单屏正常、多屏异常拉伸”,优先判定为:大宽度下图片容器与渲染策略不匹配,而非业务主动调节拉伸值。
  • 若出现“内容缺失”,优先判定为:ImageFit.Cover 与容器高度过低导致裁切,而非图片资源问题。

禁止方案(命中任一即判高风险)

  • 通过调整“人为拉伸倍率”来制造或抵消拉伸现象,缺乏真实工程约束依据。
  • 为了避免拉伸而限制整页主内容宽度,导致明显留白和交互区域浪费。
  • 仅验证多屏,不验证单屏;或仅凭截图主观判断,不提供布局边界证据。

推荐方案(按顺序执行)

  1. 先锁定单屏基线观感:保持首图在单屏全宽可见,不出现明显瘦条化。
  2. 再抑制大屏过度放大:优先限制目标图片渲染宽度或设置合理容器高度上限,而非限制整页宽度。
  3. 最后处理裁切:在不引入拉伸的前提下,提升首图容器可视高度,减少底部内容丢失。

验收门禁(未全部满足不得宣称 GoodCase)

  • 单屏门禁:修复后单屏首图不得比修复前明显变小;若单屏观感退化,必须回滚并重做。
  • 多屏门禁:双屏/三屏不出现继续放大导致的“拉伸感增强”。
  • 证据门禁:必须同时提供截图与布局 dump 的 Image bounds 对比证据。

文件读取

DEV 阶段(读取 assets)

  • ./assets/small-square-screen-collapse.md - 小方形屏底部栏折叠
  • ./assets/scroll-page-content-clipped-by-full-height.md - 滚动内容裁剪
  • ./assets/alphabetindexer-autocollapse.md - 索引器自动折叠

FIX 阶段(读取 reference)

  • ./references/size-anomaly.md - 问题分类和根因分析

SIZE-03 位置异常修复

阶段:DEV / FIX | 优先级:P1

适用场景

  • 组件相对位置或绝对位置在多设备上不适配
  • 问题:偏移、错位、对齐异常、层级错乱、组件跑到屏幕外

不适用场景

  • 仅尺寸截断(见 SIZE-02)
  • 布局容器选择错误(见 SIZE-04)

关键决策

  • 问题类型:绝对定位 / 锚点适配 / 对齐方式 / 边距累加
  • 定位方式的修复策略

文件读取

DEV 阶段(读取 assets) 暂无内容

FIX 阶段(读取 reference)

  • ./references/position-anomaly.md - 位置异常分类和根因

SIZE-04 布局异常修复

阶段:DEV / FIX | 优先级:P1

适用场景

  • 布局容器选择或配置不当
  • 问题:堆叠、遮挡、截断、布局错乱、GridRow 不降列

不适用场景

  • 仅组件尺寸问题(见 SIZE-02)
  • 仅组件位置问题(见 SIZE-03)

关键决策

  • 问题类型:容器选择 / 断点参考系 / 滚动缺失 / 嵌套结构
  • 布局容器的替换或配置修复方案

文件读取

DEV 阶段(读取 assets)

  • ./assets/gridrow-breakpoints.md - GridRow 断点问题修复
  • ./assets/stack-overlap-occlusion.md - Stack 堆叠遮挡修复
  • ./assets/row-displaypriority-truncation.ets - Row/Column 组件截断优先级
  • ./assets/SplitScreenExample.ets - 分屏模式下截断问题修复

FIX 阶段(读取 reference)

  • ./references/layout-anomaly.md - 布局异常分类和根因

SIZE-05 字体缩放与显示密度适配

阶段:REQ / DEV / FIX | 优先级:P1

适用场景

  • 用户在「设置」中修改字体大小后页面布局异常(文字溢出、组件遮挡、截断)
  • 用户在「设置」中修改显示大小缩放后布局错乱
  • 需要实现适老化支持,确保字体放大后布局稳定
  • 需要全局同步字体缩放和屏幕密度环境变量

不适用场景

  • 仅与断点或窗口尺寸变化相关(见 SIZE-01)
  • 仅组件尺寸截断且与字体/密度无关(见 SIZE-02)
  • 纯业务逻辑重构,不涉及系统环境变量

关键决策

  • 字体限制策略:应用级 fontSizeMaxScale vs 组件级 maxFontScale vs 应用内自行管理
  • 环境变量订阅方式:onConfigurationUpdate + AppStorage 全局同步
  • 密度变化监听方式:UIObserver.on('densityUpdate') + onSizeChange
  • 组件尺寸约束策略:constraintSize 限制最大/最小尺寸

文件读取

REQ 阶段(读取 reference)

  • ./references/font_scale_display_density.md - 字体缩放与显示密度适配原理

DEV 阶段(读取 assets) 暂无内容

FIX 阶段(读取 reference)

  • ./references/font_scale_display_density.md - 字体缩放与显示密度适配原理

SIZE-06 应用内分屏

阶段:REQ / DEV / FIX | 优先级:P0

适用场景

  • 通过 startAbility + StartOptions 启动另一个 UIAbility 实现系统级分屏
  • 分屏后页面截断、数据未传递、参数不更新、布局异常
  • 需要两个独立窗口并行操作

不适用场景

  • 仅与断点响应式布局相关(见 SIZE-01)
  • 平行视界 EasyGo 分栏适配(见 SIZE-00 中 adaptation-specification SPEC-08)
  • 纯悬浮窗适配不涉及分屏(见 adaptation-specification SPEC-16)
  • 分屏后仅组件尺寸截断且与分屏窗口尺寸无直接因果(见 SIZE-02)

关键决策

  • 分屏方向:preferMultiWindowOrientation 取值(default / portrait / landscape / landscape_auto
  • 跨 Ability 数据通信架构:Want.parametersLocalStorageloadContent(path, storage)@LocalStorageLink
  • 目标页面复用策略:是否复用已有 NavDestination 组件(需 Navigation 包裹),还是独立页面

文件读取

REQ 阶段(读取 reference)

  • ./references/split-screen.md - 应用内分屏完整指南

DEV 阶段(按最佳实践读取 assets)

  • ./assets/SplitScreenExample.ets - 分屏模式下截断问题修复

FIX 阶段(读取 reference)

  • ./references/split-screen.md - 应用内分屏常见问题表

关键代码模式

  • 数据流Index.onClick(分屏)startAbility(want+parameters, SPLIT_SECONDARY)EntryAbility1.onCreate/onNewWantwriteParamsToStorage(want)loadContent('DetailPage', storage)@Entry({ useSharedStorage: true }) + @LocalStorageLink 绑定
  • 目标页面复用已有 NavDestination:外层 Navigation 包裹 + .hideTitleBar(true) 隐藏外层标题栏 + .navDestination(pageMap) 加载已有组件

阶段输出契约

REQ

  • 必须输出:active_phasesprimary_phaseprimary_scenesecondary_scenes
  • 必须输出:device_constraintscapability_boundaryacceptance_focus
  • 额外要求:说明最小支持断点集合,以及每个断点下是否发生结构变化

DEV

  • 必须输出:code_touchpointsreuse_resourcesimplementation_notesintegration_risks
  • 额外要求:明确断点状态由谁维护,窗口变化由谁监听,布局由哪个容器承接

FIX

  • 必须输出:problem_profileroot_cause_hypothesisfix_planregression_watchlist
  • 额外要求: 1.明确问题属于断点边界错误、容器配置错误还是监听同步错误 2.必须显式给出 single_screen_guard(单屏不退化策略)和 multi_screen_guard(多屏不拉伸策略) 3.fix_plan 必须包含“先单屏基线、后多屏抑制、再裁切优化”的执行顺序

VAL

  • 必须输出:verification_matrixevidence_requirementspass_criteriaresidual_risks
  • 额外要求: 1.至少覆盖 small / medium / large 或项目等价断点,并提供截图、布局 dump 或窗口尺寸证据 2.图片拉伸类问题必须覆盖单屏/双屏/三屏三个窗口宽度层级(项目等价值如 1008 / 2048 / 3184) 3.pass_criteria 必须包含以下客观项:
    • 页面路径正确(目标 GoodCase 页面)
    • 三屏 Image bounds 可对比且无异常拉伸趋势
    • 单屏首图可视高度不低于修复前基线
Install via CLI
npx skills add https://github.com/openharmonyinsight/openharmony-skills --skill hmos-multidevice-screen-window-size
Repository Details
star Stars 28
call_split Forks 5
navigation Branch main
article Path SKILL.md
More from Creator
openharmonyinsight
openharmonyinsight Explore all skills →