应用在平板或PC上的布局异常
==============

#### 问题现象

当应用在直板手机查看时，布局显示正常；从平板或PC设备启动应用时，布局呈现异常状态。

#### 背景知识

*   [自适应布局](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-adaptive-layout)：当外部容器大小发生变化时，元素可以根据相对关系自动变化以适应外部容器变化的布局能力。自适应布局能力可以实现界面显示随外部容器大小连续变化。
*   [响应式布局](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-responsive-layout)：当外部容器大小发生变化时，元素可以根据断点、栅格或特定的特征（如屏幕方向、窗口宽高等）自动变化以适应外部容器变化的布局能力。目前支持的响应式布局能力包含以下三种：
    *   [断点](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-responsive-layout#section1532120147301)：将窗口宽度划分为不同的范围（即断点），监听窗口尺寸变化，当断点改变时同步调整页面布局。
    *   [媒体查询](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-responsive-layout#section1950102518311)：媒体查询支持监听窗口宽度、横竖屏、深浅色、设备类型等多种媒体特征，当媒体特征发生改变时同步调整页面布局。
    *   [栅格](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-responsive-layout#section1061332817545)：栅格组件将其所在的区域划分为有规律的多列，通过调整不同断点下的栅格组件的参数以及其子组件占据的列数等，实现不同的布局效果。响应式布局可以实现界面随外部容器大小有不连续变化，通常不同特征下的界面显示会有较大的差异。

*   [Web响应式布局](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-web-adaptation)：Web侧进行多设备适配，需结合Web组件实现在不同设备上的定制体验。内容涵盖相对单位、媒体查询、监听窗口变化事件等多设备适配能力。

#### 问题定位

**HarmonyOS页面：**

1.  需要确认页面布局异常是留白较多，内容稀疏的问题，还是布局错乱的问题。如果是页面留白较多的问题，建议检查页面自适应组件是否设置了[自适应布局](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-adaptive-layout)，有相关组件属性设置则说明开发者仅采用了自适应布局组件进行了部分的布局适配。单纯使用自适应布局会导致页面尺寸过大时，留白较多等问题；此时可以将尺寸改为百分比属性来解决留白的问题。
2.  如果页面布局错乱，建议排查是否采用响应式布局。
    *   建议检查代码在UIAbility的onWindowStageCreate生命周期回调中，是否通过窗口对象获取启动时的应用窗口宽度并注册回调函数监听窗口尺寸变化。可参考官网响应式布局[断点](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-responsive-layout#section1532120147301)案例。
    *   由于监听窗口尺寸变化有多种方式，需进一步确认代码中是否已实现[媒体查询](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-responsive-layout#section1950102518311)来进行监听应用窗口尺寸变化。
    *   建议再进一步确认代码中是否已实现[栅格](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-responsive-layout#section1061332817545)布局来进行布局适配。

**Web页面：**

*   Web页面在平板布局错乱，建议检查Web页面有没有采用相对单位、媒体查询、监听窗口变化事件等多设备适配能力进行页面开发。可以通过[使用DevTools工具调试前端页面](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-debugging-with-devtools)来进行相关设置的定位。
    *   [相对单位](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-web-adaptation#section13791174412139)：依赖其他值或元素属性来确定元素尺寸。当依赖的元素值变化时，相对单位定义的值也会随之变化。由于其动态特性，相对单位常用于前端页面的响应式开发。
    *   [媒体查询](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-web-adaptation#section767285571317)：媒体查询允许开发者根据设备特性（如屏幕尺寸、分辨率、方向等）应用不同的样式规则。这确保了网页在不同设备和屏幕尺寸下都能有良好的显示效果，从而提升用户体验。在Web页面适配HarmonyOS侧一多时，横纵向断点对应的尺寸范围与HarmonyOS侧推荐的断点划分范围保持一致。

#### 分析结论

*   HarmonyOS页面：
    1.  仅采用自适应布局组件进行开发，会导致页面在平板下呈现内容稀疏，留白过多的问题。
    2.  未采用响应式布局，会导致页面位置错乱，组件拉伸，变形等问题。
*   Web页面：
    *   Web页面没有采用相对单位、媒体查询来进行页面的响应式开发，导致Web页面在平板上展示时出现错乱的问题。

#### 修改建议

*   HarmonyOS页面：推荐采用自适应布局搭配响应式布局，采用具有自适应能力的组件搭配windowSizeChange方法监听窗口尺寸变化，或者采用响应式布局中的媒体查询和栅格布局并结合断点功能一起使用，来实现不同的布局效果。不同断点下页面组件采用不同的尺寸和布局方式。具体示例可参考：[响应式布局](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-multi-device-responsive-layout)。
*   Web页面：Web页面推荐采用相对单位（%、em、rem、vw/vh），媒体查询（同HarmonyOS侧一样，断点查询）。具体示例可参考：[基于Web响应式能力实现一多布局](https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-web-adaptation#section16635204594211)。