0%

适配全面屏手机

放个图感受一下,上面的图是折叠屏,并非是全面屏,全面屏是手机业界对于超高屏占比手机设计的一个宽泛的定义。全面屏手机屏幕的宽高比例比较特殊,不再是以前的16:9了。比如三星的Galaxy S8屏幕分辨率是:2960×1440,对应的屏幕比例为:18.5:9。VIVO X20手机屏幕分辨率是2160x1080,对应的屏幕比例:18:9。由于全面屏手机的高宽比比之前大,如果不适配的话,Android默认为最大的宽高比是1.86,小于全面屏手机的宽高比,因此,在全面屏手机上打开部分App时,上下就会留有空间,显示为黑条。

本文关于适配问题参考 https://blog.csdn.net/weelyy/article/details/79284332

显示问题

第一张图是在小米mix3上显示的问题,不得不说用户也是紧跟潮流,刚出新手机就直接入手。
下面一张图是在华为荣耀10上显示的问题,可以明显的看出,在屏幕底部都有一块黑色区域,不同的是华为荣耀10上有全屏显示的提示,点击之后可以强制全屏显示,不会留下黑框。

在AndroidManifest.xml声明max_aspect值

针对此问题,Android官方提供了适配方案,即提高App所支持的最大屏幕纵横比,实现起来也比较简单,在AndroidManifest.xml中做如下配置即可:

1
<meta-data android:name="android.max_aspect"  android:value="ratio_float"/>

其中ratio_float为浮点数,官方建议为2.1或更大,因为18.5:9=2.055555555……,如果日后出现纵横比更大的手机,此值将需要设为更大。在我司项目中设置的值为4.1,当设置该值为2.1时,在华为荣耀10上未生效。 因此,建议开发者在自己App AndroidManifest的Application标签下面增加下面一段代码:

1
<meta-data android:name="android.max_aspect" android:value="2.1" />

另外,在AndroidManifest中针对Activity标签添加android:resizeableActivity = ”true”,也可以实现全屏显示,但此设置只针对Activity生效,且增加了此属性该activity也会支持分屏显示。

当然max_aspect值也可以在代码中动态设置

1
2
3
4
5
6
7
8
9
10
11
12
public void setMaxAspect() {
ApplicationInfo applicationInfo = null;
try {
applicationInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
if(applicationInfo == null){
throw new IllegalArgumentException(" get application info = null, has no meta data! ");
}
applicationInfo.metaData.putString("android.max_aspect", "2.1");
}

具体情况可以参考谷歌官方文档

https://android-developers.googleblog.com/2017/03/update-your-app-to-take-advantage-of.html

更换资源文件

在较大高宽比的手机上,由于屏幕比例的改变(从16:9变成了18:9),对于一些铺满全屏的图片(如开屏广告页或者引导页)会出现图片拉伸的情况,如果可以接受,就不用管了。接受不了就需要适配,针对这种问题,我们以分辨率为2160X1080,像素密度为480dpi的VIVO X20Plus手机为例,可以在资源目录下面增加一个文件夹,drawable-h642dp-port-xxhdpi,并将GUI切好的分辨率为2160X1080资源图片放在这个目录下,系统就能自动使用这种图片,便不会出现拉伸的问题。关于h<N>dp的详细用法,google开发者文档也有详细介绍:

https://developer.android.com/guide/practices/screens_support

关于折叠屏

北京时间 11 月 8 日,三星在旧金山向开发者发布了一款可折叠屏幕手机。并表示,新技术需要开发者调整其 App,以确保在手机被摊开成平板电脑时,能够运行流畅。三星的这款手机,还处于原型机的状态,正式发布日期尚未确定。这种折叠的技术,三星将其称之为 Infinity Flex Display。不过 Google 也有其应对的策略,在今年的 Android Dev Summit 上,Google 就已经宣布将要对折叠屏提供“Screen Continuity(屏幕连续性)”的原生系统支持,并将这项技术称之为:Foldables。利用这种柔性显示技术,App 可以做到折叠屏设备上的适配工作。

具体情况可以参考https://mp.weixin.qq.com/s/yz5dxQyG3jvhUuDRrdNzbg


以上