自适应应用的注意事项

自适应应用支持各种尺寸的显示屏:整个设备屏幕、多窗口模式下的可调整大小的窗口、纵向和横向方向、可折叠设备的折叠和展开显示屏。

少量配置设置和 API 可让您构建自适应应用。但某些过时的设置和 API 与自适应应用不兼容,必须避免。

可调整大小

自适应应用支持应用可调整大小和多窗口模式。

resizeableActivity 属性的 <activity><application> 清单元素在 Android 11(API 级别 30)及更低版本上启用或禁用多窗口模式。在 Android 12(API 级别 31)及更高版本上,无论属性如何,大屏幕都支持多窗口模式。有关更多信息,请参阅 支持多窗口模式

✓ 执行

使您的应用能够参与多窗口、多任务场景,以提高用户效率和满意度。

如果您的应用面向低于 24 的 API 级别,请设置 resizeableActivity="true";否则,忽略它——在 Android 7.0(API 级别 24)及更高版本上,它默认值为 true

✗ 不要

不要为任何 API 级别设置 resizeableActivity="false"。不要将您的应用排除在涉及多窗口模式的用例之外。

方向

自适应应用支持纵向和横向方向,无论显示大小或窗口模式如何。

screenOrientation 清单设置限制活动方向。

✓ 执行

从您的应用清单中删除 screenOrientation 设置。

锁定应用的方向并不能阻止窗口大小变化。当应用进入多窗口模式、设备折叠或展开,或调整桌面类型窗口的大小时,应用会调整大小。无论 screenOrientation 属性设置如何,您的应用都必须支持窗口大小的变化。

✗ 不要

不要限制活动方向。锁定方向的应用在大型屏幕设备上会被加黑边,并且与窗口大小不兼容。

在平板电脑、可折叠设备和 ChromeOS 设备上,加黑边的应用在 Google Play 上的发现率会降低。

纵横比

随着屏幕和窗口大小的变化,它们的纵横比也会变化——从又高又窄,到正方形,到又矮又宽。

minAspectRatiomaxAspectRatio 清单设置将您的应用的纵横比限制为硬编码值。

✓ 执行

使您的应用适应显示,而不管相对尺寸如何。

从您的应用清单中删除 minAspectRatiomaxAspectRatio 设置。或者确保您的应用可调整大小,纵横比会自行处理(请参阅 可调整大小 部分)。

✗ 不要

不要试图控制您的应用的相对尺寸。如果您的应用在一个屏幕或窗口上运行,其纵横比与应用的纵横比不兼容,则您的应用会被加黑边。

在 Android 14(API 级别 34)及更高版本上,用户可以覆盖应用纵横比,以将加黑边的应用扩展到填充可用显示区域。请参阅 设备兼容性模式

窗口大小

针对不同显示大小优化布局是自适应设计的核心前提。自适应应用关注应用窗口大小而不是设备屏幕大小。当应用全屏时,应用窗口就是设备屏幕。

窗口大小类 提供了一种系统的方法来确定和分类应用窗口的大小。通过更改布局来适应应用窗口大小类发生变化的应用。

✓ 执行

根据窗口大小类评估您的应用窗口大小。

要确定窗口大小类,请使用 Compose Material 3 自适应库的 currentWindowAdaptiveInfo() 顶级函数。有关更多信息,请参阅 构建自适应应用

✗ 不要

不要忽略窗口大小类定义和内置 API 的实用性。不要使用已弃用的 API 来计算窗口大小。

已弃用的 API

较旧的平台 API 无法正确测量应用窗口;有些测量设备屏幕,有些排除系统装饰。

✓ 执行

使用 WindowManager#getCurrentWindowMetrics()WindowMetrics#getBounds() 获取应用窗口的大小。使用 WindowMetrics#getDensity() 获取显示密度。

✗ 不要

不要使用以下已弃用的 Display API 来确定窗口大小

Compose

Jetpack Compose 专为自适应 UI 开发而设计。无需 XML,无需布局文件,无需资源限定符。只需基于 Kotlin 的无状态可组合项,如 ColumnRowBox 来描述您的 UI,以及诸如 offsetpaddingsize 之类的修饰符来为 UI 元素添加行为。

✓ 执行

使用 Compose 构建。随时了解最新的功能和版本。

✗ 不要

不要依赖过时的技术。不要让您的应用过时。

Compose Material 3 自适应库

Compose Material 3 自适应库 提供了有助于开发自适应应用的组件和 API。

✓ 执行

使用以下 API 使您的应用具有自适应性

✗ 不要

不要重新发明轮子。不要错过所有 Jetpack Compose 库提供的开发者效率提升。

布局

用户期望应用充分利用可用的显示空间,提供补充内容或增强的控件。

自适应应用会根据显示屏的变化优化布局,特别是应用窗口大小或设备姿势的变化。

✓ 执行

随着窗口大小的变化,更改UI组件以利用可用的显示空间。例如,在紧凑型窗口大小下使用的底部导航栏,可以在中等和扩展窗口中替换为垂直导航栏。重新定位对话框,以便在所有显示屏上都能访问。

将内容组织成窗格,以启用多窗格布局,例如列表-详细信息和支持窗格,用于动态内容显示。

✓ 执行: 以双窗格布局组织列表和详细信息活动。
✗ 不要

如果您不使用内容窗格,请不要仅仅拉伸UI元素以填充可用的显示空间。长文本行难以阅读。拉伸的按钮看起来设计得很差。如果您使用Modifier.fillMaxWidth,请不要认为这对于所有显示尺寸都是正确的行为。

✗ 不要: 布局拉伸以填充扩展窗口。

输入设备

用户不仅仅使用触摸屏与应用交互。

自适应应用支持外接键盘、鼠标和触笔,以提供增强的用户体验,并帮助用户在各种尺寸的设备上提高生产力。

✓ 执行

利用Android框架的内置功能进行键盘选项卡导航以及鼠标或触控板的点击、选择和滚动。在键盘快捷键助手中发布您的应用的键盘快捷键。

使用Jetpack Material 3库 使用触笔,使用户能够写入任何TextField组件。

✗ 不要

不要使替代输入方法变得不可能。不要引入辅助功能问题。

总结

  • 使用Compose和Material 3自适应库构建您的应用
  • 基于窗口大小类创建布局
  • 创建多窗格布局
  • 使您的应用可调整大小
  • 切勿锁定活动方向
  • 不要限制纵横比
  • 支持除触摸之外的输入
  • 避免使用已弃用的API

✓ 执行 用户期望的操作:为人们每天依赖的各种设备优化您的应用。

✗ 不要 等待。立即开始吧!