应用方向、宽高比和可调整大小

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

Android 16(API 级别 36)允许应用通过覆盖屏幕方向、宽高比和可调整大小的应用限制来适应不同的外形规格和显示尺寸。这些覆盖适用于最小宽度 >= 600dp 的设备,此类设备包括以下类型:

  • 平板电脑
  • 大屏折叠屏的内屏
  • 桌面窗口化(适用于所有外形规格)

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

App is letterboxed on an unfolded large screen device prior to Android 16, but is full sceen when targeting Android 16. App shows more news items when full screen rather thanp letterboxed.
图 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 将自动管理该标志并提供应用包的优势。另请参阅应用清单概览

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

选择停用

要选择停用 API 级别 36 的行为,请声明 PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY 清单属性。

要为特定 Activity 选择停用,请在 <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 平板电脑和 Pixel Fold 系列模拟器,并在应用的模块 build.gradle 文件中设置 targetSdkPreview = "Baklava"

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

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

常见问题

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

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

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

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

  • 确保相机在纵向和横向模式下的兼容性: 假定特定宽高比和相对于相机传感器的方向的相机取景器预览可能会在不符合规范的显示屏上导致拉伸或翻转的预览。确保取景器随方向变化而正确旋转。启用取景器以适应与传感器宽高比不同的 UI 宽高比。

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

  • 使用窗口尺寸类: 在无需设备特定自定义的情况下支持不同的窗口尺寸和宽高比。假定窗口尺寸将频繁更改。使用窗口尺寸类来表征窗口尺寸,然后应用适当的自适应布局。

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

时间表

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

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

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

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

其他资源