自适应应用支持所有尺寸的显示屏:整个设备屏幕、多窗口模式下的可调整大小的窗口、纵向和横向方向、折叠和展开的可折叠设备显示屏。
简短的配置设置和 API 列表使您能够构建自适应应用。但某些过时的设置和 API 与自适应应用不兼容,必须避免。
可调整大小
自适应应用支持应用可调整大小和多窗口模式。
Android 11(API 级别 30)及更低版本中,resizeableActivity
属性(位于 <activity>
和 <application>
清单元素中)用于启用或禁用多窗口模式。在 Android 12(API 级别 31)及更高版本中,大屏幕设备无论该属性如何设置都支持多窗口模式。有关更多信息,请参阅 支持多窗口模式。
启用您的应用参与多窗口、多任务场景,以提高用户效率和满意度。
如果您的应用的目标 API 级别低于 24,请设置 resizeableActivity="true"
;否则,无需设置,因为 Android 7.0(API 级别 24)及更高版本默认情况下该属性值为 true
。
请勿为任何 API 级别设置 resizeableActivity="false"
。请勿将您的应用排除在涉及多窗口模式的用例之外。
屏幕方向
自适应应用支持纵向和横向方向,无论显示屏大小或窗口模式如何。
清单设置 screenOrientation
用于限制 Activity 的方向。
从您的应用清单中删除 screenOrientation
设置。
锁定应用方向不会阻止窗口大小发生变化。当应用进入多窗口模式、设备折叠或展开,或者自由窗格大小发生变化时,应用都会调整大小。无论 screenOrientation
属性如何设置,您的应用都必须支持窗口大小的变化。
请勿限制 Activity 方向。锁定方向的应用在大屏幕设备上会显示黑边,并且与某些窗口大小不兼容。
带有黑边的应用在平板电脑、折叠屏设备和 Chrome OS 设备上的 Google Play 中的可见度会降低。
纵横比
随着屏幕和窗口大小的变化,它们的纵横比也会发生变化,从高而窄到正方形再到矮而宽。
清单设置 minAspectRatio
和 maxAspectRatio
用于将您的应用纵横比限制在硬编码的值范围内。
使您的应用适应显示屏,无论其相对尺寸如何。
从您的应用清单中删除 minAspectRatio
和 maxAspectRatio
设置。或者确保您的应用可调整大小,纵横比会自动调整(请参阅 可调整大小 部分)。
请勿尝试控制应用的相对尺寸。如果您的应用在屏幕或窗口上运行,而该屏幕或窗口的纵横比与应用的纵横比不兼容,则您的应用会出现黑边。
在 Android 14(API 级别 34)及更高版本中,用户可以覆盖应用纵横比,以将带有黑边的应用扩展到填充可用显示区域。请参阅 设备兼容性模式。
窗口大小
针对不同显示屏大小优化布局是自适应设计的核心前提。自适应应用侧重于应用窗口大小,而不是设备屏幕大小。当应用处于全屏状态时,应用窗口即为设备屏幕。
窗口大小类 提供了一种确定和分类应用窗口大小的系统方法。通过更改应用窗口大小类来更改布局,从而使您的应用适应变化。
根据窗口大小类评估您的应用窗口大小。
要确定窗口大小类,请使用 Compose Material 3 自适应库的顶级函数 currentWindowAdaptiveInfo()
。有关更多信息,请参阅 构建自适应应用。
请勿忽视窗口大小类定义和内置 API 的实用性。请勿使用已弃用的 API 计算窗口大小。
已弃用的 API
旧版平台 API 无法正确测量应用窗口;有些测量设备屏幕,有些排除系统装饰。
使用 WindowManager#getCurrentWindowMetrics()
和 WindowMetrics#getBounds()
获取应用窗口的大小。使用 WindowMetrics#getDensity()
获取显示屏密度。
请勿使用以下已弃用的 Display
API 来确定窗口大小
getSize()
:已在 Android 11(API 级别 30)中弃用getMetrics()
:已在 Android 11(API 级别 30)中弃用getRealSize()
:已在 Android 12(API 级别 31)中弃用getRealMetrics()
:已在 Android 12(API 级别 31)中弃用
Compose
Jetpack Compose 专为自适应 UI 开发而设计。无需 XML、布局文件或资源限定符。只需使用基于 Kotlin 的无状态可组合项(如 Column
、Row
和 Box
)描述您的 UI,以及修饰符(如 offset
、padding
和 size
)为 UI 元素添加行为。
使用 Compose 构建。随时了解最新功能和版本。
请勿依赖过时的技术。请勿让您的应用过时。
Compose Material 3 自适应库
Compose Material 3 自适应库 提供了有助于开发自适应应用的组件和 API。
使用以下 API 使您的应用自适应
NavigationSuiteScaffold
:根据应用窗口大小类在导航栏和导航轨之间切换。ListDetailPaneScaffold
:实现列表-详情规范布局。使布局适应应用窗口大小。SupportingPaneScaffold
:实现支持窗格规范布局。
请勿重新发明轮子。请勿错过所有 Jetpack Compose 库提供的开发效率提升。
布局
用户期望应用充分利用可用显示空间,提供补充内容或增强控件。
自适应应用根据显示屏的变化优化布局,特别是应用窗口大小的变化或设备姿势的变化。
随着窗口大小的变化更改 UI 组件,以充分利用可用显示空间。例如,在紧凑型窗口大小上使用底部导航栏,而在中等和扩展窗口上使用垂直导航轨。重新定位对话框,使其在所有显示屏上都能触及。
将内容组织成窗格,以启用多窗格布局(如列表-详情和支持窗格),用于动态内容显示。
如果您未使用内容窗格,请勿仅仅将 UI 元素拉伸以填充可用显示空间。长行文本难以阅读。拉伸的按钮看起来设计拙劣。如果您使用 Modifier.fillMaxWidth
,请勿假设此行为适用于所有显示屏大小。
输入设备
用户不仅使用触摸屏与应用互动。
自适应应用支持外部键盘、鼠标和触控笔,以提供增强的用户体验,并帮助用户在各种外形规格上提高工作效率。
利用 Android 框架的内置功能实现键盘选项卡导航以及鼠标或触控板的点击、选择和滚动。在 键盘快捷键助手 中发布应用的键盘快捷键。
使用 Jetpack Material 3 库 使用户能够使用触控笔在任何 TextField
组件中写入内容。
请勿使替代输入方法无法使用。请勿引入可访问性问题。
总结
- 使用 Compose 和 Material 3 自适应库构建您的应用
- 基于窗口大小类创建布局
- 创建多窗格布局
- 使您的应用可调整大小
- 切勿锁定 Activity 方向
- 请勿限制纵横比
- 支持除触摸之外的其他输入
- 避免使用已弃用的 API
✓ 请执行 用户期望的操作:优化您的应用,使其适用于人们每天依赖的各种设备。
✗ 请勿执行 等待。立即开始!