自适应应用支持各种尺寸的显示屏:整个设备屏幕、多窗口模式下的可调整大小的窗口、纵向和横向模式,以及可折叠设备的折叠和展开状态下的显示屏。
通过下面简短的配置设置和 API 列表,您可以构建自适应应用。但某些过时的设置和 API 与自适应应用不兼容,必须避免使用。
尺寸可调整性
自适应应用支持应用大小可调整和多窗口模式。
<activity>
和 <application>
清单元素的 resizeableActivity
属性可在 Android 11(API 级别 30)及更低版本中启用或停用多窗口模式。在 Android 12(API 级别 31)及更高版本中,无论此属性如何,大屏设备都支持多窗口模式。如需了解详情,请参阅支持多窗口模式。
让您的应用能够参与多窗口、多任务处理场景,从而提高用户效率和满意度。
如果您的应用以低于 24 的 API 级别为目标平台,请设置 resizeableActivity="true"
;否则,请忽略它 - 在 Android 7.0(API 级别 24)及更高版本中,它默认为 true
。
请勿为任何 API 级别设置 resizeableActivity="false"
。请勿将您的应用从涉及多窗口模式的用例中排除。
方向
自适应应用支持纵向和横向屏幕方向,无论显示屏尺寸或窗口模式如何。
screenOrientation
清单设置会限制 activity 的屏幕方向。
从应用清单中移除 screenOrientation
设置。
锁定应用的屏幕方向不会阻止窗口大小发生变化。当应用进入多窗口模式、设备折叠或展开,或桌面类型窗口调整大小时,系统会调整应用大小。无论 screenOrientation
属性设置如何,您的应用都必须支持窗口大小的更改。
请勿限制 activity 屏幕方向。在兼容的窗口大小的大屏设备上,锁定屏幕方向的应用会以宽屏显示。
采用信箱模式的应用在 Google Play 上的曝光度会降低,并且仅适用于平板电脑、可折叠设备和 ChromeOS 设备。
宽高比
屏幕和窗口尺寸各不相同,其宽高比也各不相同,从窄而长到方形再到短而宽。
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 专为开发自适应界面而设计。没有 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 框架的内置功能实现键盘标签页导航以及鼠标或触控板点击、选择和滚动。在键盘快捷键帮助程序中发布应用的键盘快捷键。
使用 Jetpack Material 3 库,让用户能够使用触控笔写入任何 TextField
组件。
请勿禁止使用其他输入法。请勿引入无障碍问题。
摘要
- 使用 Compose 和 Material 3 Adaptive 库构建应用
- 基于窗口大小类别的布局
- 创建多窗格布局
- 使应用尺寸可调整
- 永不锁定 activity 屏幕方向
- 不限制宽高比
- 支持除触控以外的输入
- 避免使用已废弃的 API
✓ 满足用户的预期:针对用户每天使用的各种设备优化应用。
✗ 不要等待。立即开始体验吧!