自适应应用的注意事项

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

简短的配置设置和 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 中的可见度会降低。

纵横比

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

清单设置 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 组件,以充分利用可用显示空间。例如,在紧凑型窗口大小上使用底部导航栏,而在中等和扩展窗口上使用垂直导航轨。重新定位对话框,使其在所有显示屏上都能触及。

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

✓ 请执行: 以双窗格布局组织列表和详细信息 Activity。
✗ 请勿执行

如果您未使用内容窗格,请勿仅仅将 UI 元素拉伸以填充可用显示空间。长行文本难以阅读。拉伸的按钮看起来设计拙劣。如果您使用 Modifier.fillMaxWidth,请勿假设此行为适用于所有显示屏大小。

✗ 请勿执行: 布局拉伸以填充扩展窗口。

输入设备

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

自适应应用支持外部键盘、鼠标和触控笔,以提供增强的用户体验,并帮助用户在各种外形规格上提高工作效率。

✓ 请执行

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

使用 Jetpack Material 3 库 使用户能够使用触控笔在任何 TextField 组件中写入内容。

✗ 请勿执行

请勿使替代输入方法无法使用。请勿引入可访问性问题。

总结

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

✓ 请执行 用户期望的操作:优化您的应用,使其适用于人们每天依赖的各种设备。

✗ 请勿执行 等待。立即开始!