自适应注意事项

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

配置设置和 API 的简短列表可帮助您构建自适应 。但是,一些过时的设置和 API 与自适应应用不兼容 必须避免

尺寸可调整性

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

<activity>resizeableActivity 属性和 <application> 清单元素可启用或停用多窗口模式 模式(在 Android 11(API 级别 30)及更低版本中)。在 Android 12(API 级别 31)和 更高的大屏设备则支持多窗口模式,无论其采用哪种 属性。如需了解详情,请参阅支持多窗口模式

✓ 正确做法

让您的应用能够参与多窗口、多任务处理场景, 提高用户的工作效率和满意度。

如果您的应用以低于 24 的 API 级别为目标平台,则设置 resizeableActivity="true"; 否则,没关系,Android 7.0 (API) true 级别 24)及更高级别。

✗ 错误做法

不要为任何 API 级别设置 resizeableActivity="false"。不排除您的应用 从涉及多窗口模式的用例中受益

方向

自适应应用支持纵向和横向方向,不受显示屏限制 或窗口模式。

screenOrientation 清单设置会限制 activity 的屏幕方向。

✓ 正确做法

从应用清单中清除 screenOrientation 设置。

锁定应用的屏幕方向不会阻止窗口大小发生变化。应用 在设备进入多窗口模式时、在设备折叠或展开时调整大小, 或对自由窗口的大小进行调整时您的应用必须支持期限变更 尺寸来决定 screenOrientation 属性设置为何值。

✗ 错误做法

不限制 activity 屏幕方向。锁定屏幕方向的应用会进入信箱模式 。

采用信箱模式的应用在 Google Play 上的曝光度可能会降低, 平板电脑、可折叠设备和 ChromeOS 设备。

宽高比

由于屏幕尺寸和窗口尺寸不同,它们的宽高比也会不同 再到窄到方形,再到短和宽。

minAspectRatiomaxAspectRatio 清单设置限制 应用的宽高比与硬编码值之间的比例。

✓ 正确做法

无论相对尺寸如何,您的应用都会适合屏幕大小。

从您的应用中清除 minAspectRatiomaxAspectRatio 设置 清单。或者确保应用可调整大小且宽高比已妥善处理 (请参阅可调整大小性部分)。

✗ 错误做法

请勿尝试控制应用的相对尺寸。如果您的应用在 屏幕或宽高比与 应用的宽高比,则应用会进入信箱模式。

在 Android 14(API 级别 34)及更高版本中,用户可以替换应用宽高比 可展开进入信箱模式的应用,以填充可用的显示区域。请参阅设备 兼容模式

窗口大小

针对不同屏幕尺寸优化布局是 自适应设计。自适应应用专注于应用窗口大小,而非设备 屏幕尺寸当应用全屏显示时,应用窗口是设备屏幕。

窗口大小类别提供了一种系统化的方法来确定和分类 应用窗口的尺寸通过更改窗口形式的布局来调整应用 更改应用的大小类

✓ 正确做法

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

如需确定窗口大小类别,请使用 currentWindowAdaptiveInfo() Compose Material 3 自适应库的顶层函数。有关 相关信息,请参阅构建自适应应用

✗ 错误做法

不要忽视窗口大小类定义的效用和 内置 API请勿使用已废弃的 API 计算窗口大小。

已弃用的 API

旧版平台 API 无法正确衡量应用窗口;一些衡量 设备屏幕,有些不采用系统装饰。

✓ 正确做法

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

✗ 错误做法

请勿使用以下已废弃的 Display API 来确定窗口大小:

Compose

Jetpack Compose 专为自适应界面开发而设计。无 XML,无布局 文件,没有资源限定符。仅使用基于 Kotlin 的无状态可组合项 例如描述界面的 ColumnRowBox,以及修饰符 例如 offsetpaddingsize,它们会向界面添加行为 元素。

✓ 正确做法

使用 Compose 进行构建。及时掌握最新功能和版本。

✗ 错误做法

请勿依赖过时的技术。别让应用过时。

Compose Material 3 自适应库

Compose Material 3 Adaptive 库提供了一些组件和 API, 促进自适应应用的开发。

✓ 正确做法

使用以下 API 让您的应用具有自适应能力:

✗ 错误做法

无需再做任何重复劳动。不要错过开发者工作效率提升的大好机会 所有 Jetpack Compose 库都提供此功能。

布局

用户希望应用能够通过补充 内容或增强型控件

自适应应用会根据显示屏的变化优化布局,尤其是 应用窗口大小的变化或设备折叠状态的变化。

✓ 正确做法

在窗口大小发生变化时更改界面组件,以利用可用的 展示空间例如,更换紧凑型底部导航栏 中等窗口和较大窗口上的垂直导航栏的窗口大小。 调整对话框的位置,使其可在所有屏幕上访问。

将内容整理到窗格中,以实现多窗格布局,例如 用于显示动态内容的列表详情和辅助窗格。

✓ 正确做法:以双窗格布局整理列出 activity 和详情 activity。
✗ 错误做法

如果您使用的不是内容窗格,则不要只是拉伸界面元素,使其填满整个区域 可用的展示空间冗长的文字难以阅读。拉伸 按钮看起来设计不合理。如果您使用 Modifier.fillMaxWidth,请勿 假定行为适用于所有屏幕尺寸。

错误做法:拉伸布局以填充展开式窗口。

输入设备

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

自适应应用支持外接键盘、鼠标和触控笔, 增强了用户体验,并帮助用户提高 各种类型。

✓ 正确做法

利用 Android 框架的内置功能, 通过键盘标签页进行导航,以及使用鼠标或触控板点击、选择和滚动。发布 键盘快捷键

借助 Jetpack Material 3 库,用户可以向任何 TextField 组件(使用触控笔)。

✗ 错误做法

不要使其他输入法无法实现。不引入无障碍功能 问题。

摘要

  • 使用 Compose 和 Material 3 Adaptive 库构建应用
  • 基于窗口大小类别的基本布局
  • 创建多窗格布局
  • 使应用尺寸可调整
  • 永不锁定 activity 屏幕方向
  • 不限制宽高比
  • 支持除触控以外的输入
  • 避免使用已废弃的 API

✓ 执行用户期望的操作: 根据用户日常生活中所用设备的多样性优化您的应用。

✗ 不等待。立即开始体验吧!