Android知识Android开发经验谈Android开发

Android刘海屏适配

2018-12-18  本文已影响19人  一盘好书

背景:公司采购小米8SE后,专门用来做刘海屏的适配测试。本文主要针对小米手机做了适配,华为或其他机型没有在真机上测试过,如有问题欢迎提出。

接下来还是废话不多说,放几张公司手机适配后的样式。

Snip20181218_31.png 往上滑动后,页面效果

1.1 适配全面屏

小米刘海屏手机大部分采用的是全面屏幕,所以应该先适配全面屏幕。主要是设置一个meta-data节点

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

小米全面屏适配——传送门

截图来自小米官方文档

1.2 适配刘海屏

先来定义几个概念,如下图:

截图来自小米官方文档

小米的适配整体规则如下,主要几个容易混淆的概念:status bar隐藏与显示和透明状态栏之间是什么样的关系,全屏模式到底是什么?下文将一一解答这些问题,理解这些关系后,其他问题就比较容易理解和实施了。

image.png image.png
1.2.1 是否显示status bar

我项目中使用的就是默认模式,所以本文只针对默认模式进行一些说明。默认模式下,只有在竖屏和非全屏下才有使用耳朵区的权限。

小米官方文档,关于android O刘海屏的解释,有点懵,可能是因为没有完全明白显示status bar和不显示status bar的概念。而android P这边则有可能对全屏的理解有误差,整理一下几个概念。

不显示status bar:隐藏状态栏,就是把含有电量,网络等标志的状态栏给gone掉。注意这里的gone掉,是完全看不到状态栏,例如,视频播放,游戏等情形下。

具体的代码设置如下,注意全面屏的flag为View.SYSTEM_UI_FLAG_FULLSCREEN:

window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_FULLSCREEN);

显示status bar:这时,可以分成两种情况,一种就是默认状态栏,还有一种是透明状态栏,注意透明状态栏也是显示status bar的,这里很容易产生误解。

1.2.2 是否是全屏模式

文档中介绍的全屏模式:隐藏状态栏
不隐藏状态栏则可以分为两种情况:透明状态栏,默认状态栏。

对应与代码中的flag标志:
透明状态栏:View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN;
全屏(状态栏隐藏):View.SYSTEM_UI_FLAG_FULLSCREEN。

1.3 总结

第一种情况:
android P之前:只存在默认模式,也就是说,非全屏 + 竖屏就有权限使用耳朵区,具体使用方式,其实和低版本适配状态栏一致,只是这个状态栏是一个包含刘海的状态栏。可参考我的文章Android透明状态栏与状态栏文字颜色更改

第二种情况:
android P之后:有三种模式可以使用,如果在默认禁止的情况下使用

LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES

则可以开始使用耳朵区,那么此时就需要对页面进行适配,通过获取到的刘海屏的宽高,对页面进行相应的更改。

上一篇下一篇

猜你喜欢

热点阅读