自从IPhone X出现刘海的设计,今年各大android手机厂商也纷纷效仿,也为自家的手机设计刘海;这不小米8就是有刘海设计的,这可苦了手机应用开发的码农了,因为各大android手机厂商,他们刘海api都不一样,需要码农每个品牌的手机都做下适配。下面简单说下小米8的适配。
1、APP开启全屏显示
首先看下官方的文档:https://dev.mi.com/console/doc/detail?pId=1160,很可惜当我按照它说的去做发现这个然并卵,我APP没有全屏显示,刘海那边全是黑的,后来我在另一篇博客中找到另外一种设置方式如下:
在APP的AndroiManifest.xml添加上面meta-data设置就行,这样APP就能全屏显示了。
2、APP判断是否有刘海并获取刘海宽度
2.1判断是否有刘海
小米系统增加了一个属性 ro.miui.notch,值为1时则是有刘海反之没有。其值获取的方式也很简单
SystemProperties.getInt("ro.miui.notch", 0) == 1;
注意SystemProperties这个类在android.os下,但是这个类是隐藏的,上层的程序是无法直接调用的,那么我们可以用反射的机制来使用这个类;代码如下
int defaultVal = 0;
try
{
Class<?> cls = Class.forName("android.os.SystemProperties");
Method getMethod = cls.getMethod("getInt", String.class, int.class);
defaultVal = (Integer)getMethod.invoke(cls, "ro.miui.notch", 0);
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
return defaultVal;
}
如此我们就可以判断当前的小米设备是否有刘海了。
2.2获取刘海宽度
判断了是否有刘海接下来就是要获取刘海的宽度,以便来调整UI的显示,其获得的方式如下:
int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
if (resourceId > 0) {
result = context.getResources().getDimensionPixelSize(resourceId);
}
OK,这样基础开启全面屏显示,判断是否是刘海屏以及获取刘海的宽度的方式都介绍完了,接下来就是各位自己去调整自己APP的UI了。