本文首发地址 https://h89.cn/archives/546.html

Android 17(API 37)是 2026 年的新一代 Android 版本,目前仍处于 Beta 阶段。本文内容基于 Android 17 Beta 3 阶段已公开的信息整理。单看系统功能,它当然也带来了一批新变化;但如果你是 Android 开发者,这一版最值得优先关注的,其实不是某个新开关,而是大屏适配这件事彻底进入了“不能再拖”的阶段。

Android 16 里,Google 已经开始推动应用摆脱固定方向、固定宽高比和不可调整大小这些旧思路,同时还留了一点临时缓冲空间。到了 Android 17 Beta 3 这个时间点,这个方向已经非常明确:面向大屏设备时,方向和可调整大小限制会被系统直接忽略。

这篇文章不打算把所有更新平均用力,而是先抓住最关键的变化,再补充其他值得了解的新特性,最后给出一份更贴近实际开发的自查思路。

先看结论

  • 目标 SDK 升到 API 37 后,大屏场景下的方向、可调整大小和宽高比限制会被系统忽略
  • Android 16 留下的临时退出机制,到 Android 17 不再可用
  • 适配重点不在清单属性本身,而在相机预览、旧显示 API、布局和状态保存
  • 这项变化并非无差别生效,游戏和部分非大屏场景不受影响

发布时间线

  • Beta 1:2026 年 2 月 13 日
  • Beta 2:2026 年 2 月 26 日
  • Beta 3:2026 年 3 月 26 日(最终 SDK/NDK API、平台稳定性)
  • 稳定版:预计 2026 年 6 月
  • Google Play 适配要求:2027 年 8 月前必须适配 API 37

主要新特性

1. 大屏上不再接受方向与可调整大小限制

如果只看一项变化,我认为就是这一项。

当应用以 API 37 为目标版本时,在平板、展开态折叠屏、桌面窗口等大屏场景里,系统会直接忽略你对方向、可调整大小和宽高比施加的限制。

受影响的 manifest 属性如下:

<!-- 这些设置在大型屏幕上不再生效 -->
<activity
    android:screenOrientation="portrait"
    android:resizeableActivity="false"
    android:maxAspectRatio="2.1"
    android:minAspectRatio="1.5" />

对应的运行时 API 也会被忽略:

requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT

换句话说,系统不再继续帮那些“默认只按手机竖屏思路写的应用”兜底。窗口该拉宽就拉宽,该旋转就旋转,应用自己得接住。

直接影响:

  • 只按竖屏设计的页面,可能在横向大屏里被拉伸或留白
  • 依赖固定宽高比的相机预览,容易出现拉伸、裁切或方向错误
  • 屏幕旋转和窗口变化更频繁,状态保存做得不完整时更容易丢内容

例外情况:

  • 游戏应用
  • 用户在系统里明确选择了应用默认显示方式
  • 非大屏显示区域

除了大屏适配这条主线,其他更新里我觉得更有辨识度的,主要有下面 5 项。

2. 重新设计的屏幕录制工具栏

Android 17 Beta 3 引入了新的屏幕录制体验,重点是把常用操作前置,少走一步菜单:

  • 浮动工具栏设计,提供更便捷的录制控制
  • 点击快速设置磁贴后直接访问录制设置
  • 更直观的用户界面

3. 助听设备音频路由增强

对于连接助听设备的用户,Android 17 提供了更细的音频路由能力:

  • 可独立选择通知、铃声和警报的播放设备
  • 可选择播放到助听设备或设备内置扬声器
  • 独立的 Assistant 音量滑块,与媒体音量分离

4. 桌面模式交互式画中画

Android 17 为桌面窗口模式引入了交互式画中画功能:

  • PiP 窗口可保持交互状态
  • 始终显示在其他应用窗口之上
  • 支持桌面环境下的多任务操作

5. 外部显示小部件支持改进

针对外部显示器的小部件显示进行了优化:

  • 小部件填充、文本大小和布局属性自动缩放
  • 基于应用原始上下文与目标显示器的密度差进行调整
  • 提升跨设备小部件显示效果

6. RAW14 图像格式支持

Android 17 引入了对 RAW14 图像格式的支持:

  • 为专业摄影应用提供更高位深
  • 支持更高质量的图像处理流程
  • 与现代相机传感器特性兼容

其他更新速览

其余变化也值得知道,但单拎出来展开的必要性没那么高,放在这里快速过一遍更合适:

  • 独立的 Wi-Fi 和移动数据切换:快速设置里重新拆成两个开关,操作更直接
  • 隐藏应用标签:主屏幕支持隐藏应用名称,界面可以更简洁
  • 逐应用深色主题例外:用户可按应用关闭自动深色主题
  • 文本光标闪烁速率自定义:可调整闪烁频率,甚至完全关闭

开发者适配指南

适配大型屏幕

如果你准备把目标 SDK 升到 37,我更建议先别急着看“要不要改 manifest”,而是先排查应用里有没有这些旧假设:

  1. 写死方向或宽高比:例如 screenOrientationresizeableActivity="false"maxAspectRatio
  2. 依赖旧显示 API:例如 Display#getSize()getRealSize() 这类过时接口
  3. 相机预览假设过多:默认认为设备天然是竖屏,或把传感器方向写死
  4. 状态保存不完整:旋转、分屏、桌面窗口拖拽后页面被重建,状态丢失

真正动手时,可以优先看这几项:

  1. 相机预览适配

     // 使用Jetpack CameraX(推荐)
     val previewView = PreviewView(context).apply {
         scaleType = PreviewView.ScaleType.FILL_CENTER
     }
    
     // 或使用CameraViewfinder
     val viewfinder = CameraViewfinder(context)
  2. 防止UI拉伸

     // 使用widthIn修饰符限制最大宽度
     Box(
         contentAlignment = Alignment.Center,
         modifier = Modifier.fillMaxSize()
     ) {
         Column(
             modifier = Modifier
                 .widthIn(max = 300.dp) // 防止拉伸超过300dp
                 .fillMaxWidth()        // 最大填充到300dp
                 .padding(16.dp)
         ) {
             // 内容
         }
     }
  3. 确保滚动功能

     // 添加垂直滚动以防止按钮不可访问
     Column(
         modifier = Modifier
             .fillMaxSize()
             .verticalScroll(rememberScrollState())
             .padding(16.dp)
     ) {
         // 内容
     }
  4. 改用基于窗口的判断方式

     val windowMetrics = WindowMetricsCalculator
         .getOrCreate()
         .computeCurrentWindowMetrics(activity)
    
     val bounds = windowMetrics.bounds
     val isLandscapeWindow = bounds.width() > bounds.height()

状态保存

方向切换、分屏、多窗口拖拽都会让配置变更更频繁,状态保存这件事在 Android 17 上只会更重要:

// 使用rememberSaveable保存状态
var scrollPosition by rememberSaveable { mutableStateOf(0) }

// 或使用ViewModel
class MyViewModel : ViewModel() {
    private val _uiState = MutableStateFlow(MyUiState())
    val uiState: StateFlow<MyUiState> = _uiState.asStateFlow()
}

测试建议

仅仅在手机模拟器里跑一遍,大概率看不出问题。更靠谱的做法是把测试重点放到“窗口变化”本身:

  1. 先用兼容框架提前打开新行为

    adb shell am compat enable UNIVERSAL_RESIZABLE_BY_DEFAULT your.package.name
    adb shell am compat disable UNIVERSAL_RESIZABLE_BY_DEFAULT your.package.name
  2. 至少覆盖这几类设备和窗口场景

    • 平板横竖屏切换
    • 折叠屏展开与折叠
    • 分屏、多窗口、桌面窗口拖拽
    • 外接显示器场景
  3. 把“是否铺满窗口”纳入回归检查

    • 重点看是否出现黑边、内容拉伸、按钮跑出可视区
    • 相机页要重点检查预览方向、裁切和切换前后摄时的表现
  4. 如果还是预览版 SDK,再使用 preview 配置

    • 例如 targetSdkPreview
    • 等正式 SDK 发布后,及时切回稳定的 targetSdkVersion 37

总结

Android 17 不是单纯继续推进大屏适配,而是把这件事进一步变成默认规则。

如果应用里还留着固定方向、旧显示 API、相机预览写死、状态不保存这些老问题,现在就该尽早清掉。越早适配,后面升级目标 SDK 越轻松。

详细大屏适配可以参考前文 Android 16 大屏适配:打破方向限制,拥抱全屏未来


参考来源


本文链接:Android 17 (API 37) Beta 3 新特性详解:大屏适配不再有退路 - https://www.h89.cn/archives/546.html

版权声明:原创文章 遵循 CC 4.0 BY-SA 版权协议,转载请附上原文链接和本声明。

标签: Android 17, 新特性, 适配

添加新评论