大家好,今天讲Android 16。
实际上Android 16离正式推出还有很长时间,我也还没有开始研究Android 16的新特性。只有上篇文章中有朋友在评论区这样留言:
我也不知道Android 16中居然还会开启这样的限制,于是我赶紧去找了Google官方文档学习了一下,确有此事。
那么我会在本篇文章中解析一下官方文档中的内容,帮助大家更好地为Android 16的适配工作提前做好准备。
官方文档链接地址如下,想要直接学习原版内容的朋友请参考:
我们都知道,Android现在是全球用户量最大的操作系统,运行在超过30亿台设备上。
这些设备以手机为主,但同时还包括了平板,笔记本,手表、车载等等其他设备。
由于手机的用户量最大,大部分开发者在进行应用程序开发时主要都只考虑了手机平台,而对其他平台没有进行很好地支持。这导致这些程序在一些大屏设备上运行时,通常适配性都表现得比较差。
其实Google从Android 12的时候就开始大力推行大屏设备的适配,提出了adaptive apps的概念,并且推出了Pixel Fold这种折叠屏设备来让手机可以一秒变平板。
不过大屏适配这种事情只有Google热衷是没有用的,还得广大开发者们一起积极参与进来才行。
只是Android大屏设备的保有量并不高,许多中小型App开发者的适配积极性不足,这也导致直到今天仍然还有许多App在大屏设备上的运行体验是比较差的。
具体差在什么地方呢?
比如说,有些App锁死了横竖屏旋转(screenOrientation),让App在平板上运行时也只能显示竖屏模式,这样就可以和手机共用同一套界面布局。
更有甚者,有些App直接限定死了界面的宽高比(maxAspectRatio/minAspectRatio),并且拒绝Activity根据屏幕尺寸更改界面大小(resizeableActivity),导致即使是在大屏设备上,App仍然只能显示手机模式的界面。
所以为了更好地推进adaptive apps的理念,这次在Android 16系统上Google又放大招了。再不肯好好适配大屏设备?上面所有这些限制屏幕方向和比例的API全部不准用了。
这里我列出一张表格,涉及到了所有受影响的API及其属性。
API名称 | 失效属性 |
---|---|
screenOrientation | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
setRequestedOrientation() | portrait, reversePortrait, sensorPortrait, userPortrait, landscape, reverseLandscape, sensorLandscape, userLandscape |
resizeableActivity | 全部 |
minAspectRatio | 全部 |
maxAspectRatio | 全部 |
这也就是文章开头提到的,有朋友说Android 16不再支持横竖屏设置的缘由。
但是经过我进一步仔细分析Google的官方文档,发现实际的影响范围并没有那么大。
因为上述API会失效其实是有一个大前提的,那就是只会在大屏设备上失效。再具体一点,就是在最小宽度大于等于600dp的设备上,上述API才会失效。
最小宽度大于等于600dp的设备通常包括了平板、展开后的折叠屏手机、Chromebook等等。
官方文档提到,99.96%的普通手机都不在这个范围内,因此对于手机App而言,上述限制屏幕方向和比例的API仍然是可以正常使用的。
相信看到这里大家终于可以长舒一口气了,因为绝大部分的开发者朋友主要工作领域应该都还是在手机上的。
但是这也不意味着我们又可以对大屏设备的适配工作完全置之不理了。
即使你想说你们的App并不打算支持在除手机以外的Android设备上运行,但是别忘了,现在的折叠屏设备是可以瞬间从手机模式切换成平板模式的。随着未来折叠屏设备越来越多,大屏设备的适配工作仍然是绕不开的,所以建议大家尽可能地还是尽早适配。
至于如何让你的App适配大屏设备,这就不是这篇文章要覆盖的内容了,具体可以参考官方文档:
https://developer.android.google.cn/adaptive-apps
我后面也很有可能会写Compose版的大屏设备适配文章。
另外Google也特别提到了,由于这次大屏设备的适配工作涉及面很广,需要解决许多诸如布局错位偏移、内容相互覆盖等问题,有些界面甚至需要完全重写才行。为了让广大开发者有更加充足的时间进行适配,Google设置了一些限期的豁免条件。
首先,只有targetSdk指定到了36及以上的App,运行在Android 16的大屏设备上时,才会出现限制屏幕方向和比例的API失效的情况。所以只要你的App targetSdk还低于36就暂时不用担心。
另外,即使targetSdk指定到了36,Android 16也允许我们通过在AndroidManifest.xml中配置如下内容来临时绕开这个限制:
<application ...>
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY" android:value="true" />
</application>
这就意味着Google给了开发者一年左右的豁免期,让我们可以有更加充足的时间去完成大屏设备的适配。
但同时Google也强调了,2026年发布的Android版本,也就是明年的Android 17,上述的PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY属性将会失效。
到时如果还没有完成大屏设备适配的话,就没有任何绕开的办法了。
如果你现在就准备开始进行适配了,可以下载安装最新的Android 16 Beta版,并且将targetSdk指定成Android 16的预览版即可。
https://developer.android.google.cn/about/versions/16/get
targetSdkPreview = “Baklava”
实际上,即使还没有Android 16的环境也不影响你立刻对大屏设备进行适配。只需要将上述限制屏幕方向和比例的API从你的代码里全部移除,然后找一台任意系统版本的Android平板来进行UI适配测试就可以了。
希望大家都能顺利完成适配。