大屏与折叠屏适配全景:窗口模式与 Configuration
2026/8/9大约 3 分钟大屏/折叠屏/自由窗口Android 14大屏折叠屏窗口模式
大屏与折叠屏适配全景:窗口模式与 Configuration
大屏适配的输入不是设备型号,而是应用当前获得的窗口边界、窗口模式与 Configuration。 同一设备上的全屏、分屏和自由窗口都可能产生不同尺寸,布局和状态恢复必须响应这些变化。
适配对象是窗口,不是物理屏幕
| 常见误解 | 正确理解 |
|---|---|
| 大屏只是分辨率更高 | 大屏改变的是窗口模式与可用布局,不是简单的像素变多 |
| 折叠屏适配 = 处理横竖屏 | 折叠状态变化会触发 Configuration 变化与连续性要求 |
| 手机能跑就一定能上大屏 | 需要适配窗口可变、尺寸等级与多窗口场景 |
核心结论
- 大屏适配的核心是“窗口可变 + 尺寸等级 + Configuration 响应”。
- 尺寸等级分 compact/medium/expanded,指导布局断点。
- 窗口模式变化会带来 Configuration 变化,应用可选择自行处理或重建。
- 折叠屏的展开/折叠是另一种 Configuration 变化,要求状态连续性。
- 适配目标是:任何窗口尺寸下内容可用、布局合理、状态不丢。
窗口模式与适配主链
逐步解释:
- 形态:设备决定默认窗口能力。
- 模式:窗口可全屏、分屏或自由窗口。
- 配置:尺寸、密度、方向变化通知应用。
- 等级:用断点决定用什么布局。
- 响应:布局与资源随尺寸切换。
尺寸等级速查
| 等级 | 典型宽度 | 常见布局 |
|---|---|---|
| compact | < 600dp | 单列列表 |
| medium | 600–840dp | 双栏(列表+详情) |
| expanded | > 840dp | 多栏/自由布局 |
尺寸等级是大屏适配的“公共语言”,比硬编码宽度更稳健。
常用在哪些地方
按排查频率排列:
- 平板/折叠屏布局错乱:未按尺寸等级适配。
- 分屏后窗口太小:未处理最小尺寸或固定方向。
- 折叠展开状态丢失:未处理 Configuration 连续性。
- 自由窗口拖动后布局异常:未响应尺寸变化。
- 桌面模式窗口化:未声明可调整大小。
验证与排障
环境:开发设备或模拟器;以下命令不需要 root。
adb shell wm size
adb shell wm density
adb shell dumpsys activity activities | grep -iE "windowingMode|bounds"
adb shell settings put global overlay_display_devices 1920,1080wm size/density 模拟尺寸;dumpsys activity 看窗口模式与 bounds;overlay display 可模拟副屏。适配问题先用这些命令复现窗口尺寸,再看布局表现。
源码入口
| 文件 | 关键位置 | 作用 |
|---|---|---|
WindowConfiguration.java | 窗口模式 | 形态定义 |
Configuration.java | 配置字段 | 尺寸/密度 |
Activity.java | onConfigurationChanged() | 配置响应 |
wm 命令 | 命令行 | 模拟尺寸 |
公共路径:frameworks/base/core/java/android/content/res/ 与 frameworks/base/core/java/android/app/。行号以 r75 检索为准。
窗口可以自由调整大小时,见 自由窗口。