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