现在,Android 应用可在各种设备(例如手机、平板电脑、可折叠设备、桌面设备、汽车和电视)上运行,并且在大屏设备上支持多种窗口模式(例如分屏和桌面窗口),因此开发者应构建能够适应任何屏幕和窗口尺寸的 Android 应用,无论设备方向如何。在当今多设备的世界中,限制屏幕方向和尺寸可调整性等范式过于严格。
忽略屏幕方向、尺寸可调整性和宽高比限制
对于以 Android 17 或更高版本为目标平台的应用,屏幕方向、尺寸调整和宽高比限制不再适用于最小宽度大于 600dp 的显示屏。应用会填满整个显示窗口,无论宽高比或用户偏好的屏幕方向如何,都不会使用竖条模式。
Android 17 移除了 Android 16 中提供的针对大屏设备上的屏幕方向和尺寸调整限制的临时开发者选择停用功能。
此变更引入了新的标准平台行为。Android 正在向一种模式转变,在这种模式下,应用需要适应各种屏幕方向、显示大小和宽高比。固定屏幕方向或有限的尺寸调整等限制会阻碍应用的适应性。让您的应用具有自适应性,以提供尽可能最佳的用户体验。
您还可以使用应用兼容性框架并启用 UNIVERSAL_RESIZABLE_BY_DEFAULT 兼容性标志来测试此行为。
常见的重大更改
忽略屏幕方向、可调整大小性和宽高比限制可能会影响应用在某些设备上的界面,尤其是那些专为锁定为纵向的小布局设计的元素。例如,应用可能会出现布局拉伸、动画和组件超出屏幕等问题。您对宽高比或屏幕方向做出的任何假设都可能会导致应用出现视觉问题。详细了解如何避免这些问题并改进应用的自适应行为。
在横屏可折叠设备上或在多窗口、桌面窗口化或连接的显示屏等场景中进行宽高比计算时,常见的问题是相机预览画面出现拉伸、旋转或裁剪。此问题通常发生在大屏设备和可折叠设备上,因为应用假定相机功能(例如宽高比和传感器方向)与设备功能(例如设备屏幕方向和自然屏幕方向)之间存在固定关系。详细了解如何管理相机预览。
允许设备旋转会导致更多 activity 重新创建,如果未正确保留,可能会导致用户状态丢失。如需了解如何正确保存界面状态,请参阅保存界面状态。
实现细节
在全屏模式和多窗口模式下,以下清单属性和运行时 API 会被大屏设备忽略:
screenOrientationresizableActivityminAspectRatiomaxAspectRatiosetRequestedOrientation()getRequestedOrientation()
系统会忽略 screenOrientation, setRequestedOrientation() 和 getRequestedOrientation() 的以下值:
portraitreversePortraitsensorPortraituserPortraitlandscapereverseLandscapesensorLandscapeuserLandscape
对于显示屏可调整大小性,android:resizeableActivity="false",
android:minAspectRatio 和 android:maxAspectRatio 没有影响。
异常
在以下情况下,Android 17 的屏幕方向、尺寸可调整性和宽高比限制不适用:
- 游戏(基于
android:appCategory标志) - 用户在设备的宽高比设置中明确选择启用应用的默认行为
- 最小宽度小于
sw600dp的屏幕