Android屏幕适配之全面屏适配
引言
从2017年开始,全面屏之战逐渐如火如荼的展开了,那么我们Android程序员又多了一个小事情,就是解决全面屏适配的问题。
全面屏和以前的屏幕相比,有以下几点改变
- 以前 16 : 9 的 比例 变成了 18 : 9,甚至是 19 : 9 ...
- 屏幕内的虚拟导航键
解决方案来了
一、解决现实不全,黑边的情况
方案一、
声明方式
<meta-data
android:name="android.max_aspect"
android:value="ratio_float"/>
ratio_float这个值怎么取呢?
其实就是高宽比。
传统的手机高宽比是:16 : 9 即 16 / 9 ≈ 1.78
那么全面屏的手机宽高比:18 :9 即 18 / 9 = 2
但是这个时候,我们需要注意一下,现在很多手机都在追求更大的高宽比,即让屏幕顶部和底部边框越小越好,比如现在的「小米 mix 3 」
即他的高宽比是
19.5 / 9 ≈ 2.17
所以保险起见,设置成为 2.2, 当然这个值也不是固定的,如果有更新的手机上市,没准我们还得改。
即这样设定就好了
<meta-data
android:name="android.max_aspect"
android:value="2.2" />
方案二、
Android 7.0 google 默认支持了分屏模式,即 Manifest 文件中配置 Activity 的
android:resizeableActivity="true"
注意:此设置只针对Activity生效,且增加了此属性该activity也会支持分屏显示。
那么这个时候就不需要再配置上面的 「最大屏幕高宽比」,就可以适配全面屏了。
但是如果通过自定义控件将“分屏模式”禁止的话,就会出现屏幕 上下黑边的效果,非常丑。
方案三、
修改AndroidManifest.xml文件,设置targetSdkVersion>=26,就是应用升级到O版本。
不需要设置其他任何属性,默认在任何纵横比的屏幕都能全屏显示。
(备注:有一种例外情况需要注意,应用如果已经适配到O版本,并且通过meta-data属性android.max_aspect或者是android:MaxAspectRatio属性设置了页面支持的最大纵横比,同时又通过android:resizeableActivity=“false”设置了页面不支持分屏,这个时候系统会按照应用自己设置的最大纵横比决定该页面是否能全屏显示,如果应用设置的最大纵横比比手机屏幕比例小,那应用还是无法全屏显示。)
二、启动页适配
默认 UI 为我们切的启动页面的图是固定的,比如 1920*1080
这个能适配以前一般的分辨率的手机,但是全面屏的出现,我们会发现,这个启动页的图片会被拉伸,一般是纵向拉伸,因为 “高” 变大了。
那么这种情况的解决方法其实有这么几种思路:
- 让美工将不同全面屏的分辨率的启动页图片进行重新设计,当然,这样会稍微加大apk的体积
- 如果启动页设计的不是很复杂的话,可以使用「.9图」进行设计,这样即使拉伸,也不会有很大的影响
- 如果启动页能用布局文件xml 来绘制出来的话,当然是极好的。
三、虚拟导航按键的优化
本人还是觉得虚拟导航按键不是一个好东西,但是全面屏的出现,真的把我以前喜欢的"实体按键" 给舍弃掉了。
我倒是觉得替代以前的"实体按键"的最好的方法,还是手势操作。起码我觉得小米8 的手势操作很 6 有没有。再看看苹果,压根就不同虚拟按键考虑好不。。。
不过,这是我自己的拙见,请各位虚拟按键爱好者,不要喷我,先行谢过。
依稀还记得适配虚拟按键是从华为开始的,后来开始适配乐视,可是现在。。。
原则,虚拟按钮的显示样式,其实根据当前具体的页面情况进行调整,调整策略其实和status bar 的类似。
可以通过
window.setNavigationBarColor(int color)
来定义颜色。
或者通过设置当前activity 主题 或者设置application主题
在主题的样式中设置:
<item name="android:navigationBarColor">要设置的颜色值</item>
即可。
总结
频繁的手机更新迭代,虽然让我们程序员多了一些事情可做,但是却也是我们喜闻乐见的事,手机在发展,说明我们的行业也在发展呀,况且,解决这些问题也不是难事。你说是不是呢?
如果没看懂我的文章,请观看小米官网提供的方案(其实是一致的):
全面屏及虚拟键适配说明