应用屏幕方向、宽高比和尺寸调整

Android 应用可在各种类型的设备上运行,包括手机、平板电脑、可折叠设备、Chromebook、汽车、电视,甚至 XR。为了适应这种多样化的环境,您的应用应支持所有设备外形规格和显示大小。

Android 16(API 级别 36)支持应用通过替换屏幕方向、宽高比和可调整大小方面的应用限制,以适应不同的外形规格和显示大小。这些替换项适用于最小宽度大于等于 600dp 的设备,该值定义如下:

  • 平板电脑
  • 大屏可折叠设备的内部显示屏
  • 桌面窗口化模式(适用于所有设备规格)

如果显示屏的最小宽度大于等于 600dp,以 API 级别 36 为目标平台的应用可调整大小,并且能够进入多窗口模式(相当于 resizeableActivity="true")。

在 Android 16 之前,应用在大屏设备展开后会采用信箱模式,但以 Android 16 为目标平台时会全屏显示。应用在全屏显示时会显示更多新闻内容,而不是以信箱模式显示。
图 1. 开发者新闻动态之前在大屏设备上采用信箱模式(左),在以 Android 16 为目标平台时会全屏运行(右)。

Android 16 强制采用自适应应用设计的一致模型,该模型会遵循用户对设备屏幕方向、宽高比和显示大小的偏好设置,从而优化用户体验。

变更

对于以 Android 16(API 级别 36)为目标平台的大屏设备应用,系统会忽略以下清单属性和 API:

属性或 API 被忽略的值
screenOrientation portraitlandscapereversePortraitreverseLandscapesensorPortraitsensorLandscapeuserPortraituserLandscape
resizeableActivity 全部
minAspectRatio 全部
maxAspectRatio 全部
setRequestedOrientation()

getRequestedOrientation()
portraitlandscapereversePortraitreverseLandscapesensorPortraitsensorLandscapeuserPortraituserLandscape

异常

Android 16 变更的例外情况包括:

  • 小于 sw600dp 的显示屏(大多数手机、翻盖手机和大屏幕可折叠设备的外屏)

  • 游戏,基于 android:appCategory 标志

    使用 Android App Bundle 和 Play 应用签名功能发布游戏,让 Google Play 管理该标志并自动提供 app bundle 的优势。另请参阅应用清单概览

  • 用户在宽高比设置中选择启用应用的默认行为

选择停用

如需停用 API 级别 36 行为,请声明 PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY 清单属性。

如需停用特定活动,请在 <activity> 元素中设置相应属性:

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

如需为整个应用停用,请在 <application> 元素中设置该属性:

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

测试

如需测试您的应用是否受到 Android 16 变更的影响,请在 Android Studio 中使用 Pixel Tablet 和 Pixel Fold 系列模拟器,并在应用的模块 build.gradle 文件中设置 targetSdkPreview = "Baklava"

或者,通过启用 UNIVERSAL_RESIZABLE_BY_DEFAULT 标志,在测试设备上使用应用兼容性框架(请参阅兼容性框架工具)。

您可以使用 Espresso 测试框架和 Jetpack Compose 测试 API 自动执行测试。

常见问题

限制设备屏幕方向、宽高比或应用尺寸调整的应用在 Android 16 上可能会出现显示问题,例如布局重叠。

为了在手机、可折叠设备、平板电脑、Chromebook、车载显示屏或 XR 上提供最佳用户体验,请构建响应式和自适应应用:

  • 避免拉伸界面组件:针对标准纵向手机屏幕设计的布局可能无法适应其他宽高比。例如,填充整个显示屏宽度的界面元素在横屏模式下会被拉伸。为组件添加宽度上限,以免出现拉伸。

  • 启用布局滚动:如果布局不滚动,用户可能无法访问横屏模式下屏幕外面的按钮或其他界面元素。启用应用布局滚动功能,以确保无论显示屏的高度如何,都可以访问所有内容。

  • 确保在纵向和横向模式下相机兼容性:如果相机取景器预览假定相对于相机传感器的特定宽高比和方向,则可能会导致在不合规的显示屏上预览画面被拉伸或翻转。确保取景器会随着屏幕方向的变化而正确旋转。 让取景器能够调整为与传感器宽高比不同的界面宽高比。

  • 在窗口大小发生变化时保留状态:移除屏幕方向和宽高比限制后,应用窗口大小可能会频繁发生变化,以响应用户偏好的应用使用方式,例如通过旋转、折叠或展开设备,或在多窗口模式或桌面窗口模式下调整应用大小。配置更改(例如屏幕方向更改和窗口大小调整)会导致重新创建 activity(默认情况下)。为确保最佳用户体验,请在配置更改期间保留应用状态,以便应用保留数据(例如表单输入内容),并且用户可以保持上下文。

  • 使用窗口大小类别:无需进行设备专用自定义即可支持不同的窗口大小和宽高比。假设窗口大小会频繁变化。使用窗口大小类别来描述窗口尺寸,然后应用适当的自适应布局。

  • 构建自适应布局:在窗口大小类别中,自适应布局会根据显示屏尺寸的变化进行调整,以始终创建最佳应用呈现效果。

时间轴

  • Android 16(2025 年):对于以 API 级别 36 为目标平台的应用,支持所有屏幕方向和宽高比以及应用大小可调整功能是大屏设备(最小屏幕宽度 >= 600dp)的基准体验。不过,开发者可以选择停用此功能。

  • 2026 年发布的 Android 版本:对于以 API 级别 37 为目标平台的应用,支持所有屏幕方向和宽高比以及应用大小可调整功能将是大屏设备(最小屏幕宽度 >= 600dp)的基准体验。开发者将无法选择停用此功能。

目标 API 级别 适用设备 允许开发者停用
36 (Android 16) 大屏设备(最小屏幕宽度 >= 600dp)
37(预计) 大屏设备(最小屏幕宽度 >= 600dp)

以特定 API 级别为目标平台的截止期限因应用商店而异。自 2026 年 8 月起,Google Play 将要求应用以 API 级别 36 为目标平台,自 2027 年 8 月起,以 API 级别 37 为目标平台。

其他资源