文档开发者中心
我的

从0到1优雅实现沉浸式状态栏 【后篇】

这样,Android 4.4以上的手机就适配完毕了。


/ 特殊场景 /


现在来针对一些特殊场景进行适配,比如启动页、刘海屏和弹窗等等。


启动页


对于启动页,一般都会把状态栏收上去,这需要适配刘海屏,否则刘海区域会显示黑的一片。其实Android P以上提供了适配刘海屏的方法,在启动页Activity添加如下代码:


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
StatusBarUtils.setTransparent(this);
// 适配刘海屏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
getWindow().setAttributes(layoutParams);
}
}

但是一些手机厂商的刘海屏手机系统版本是低于Android P的,不过也都提供了适配的方法。适配方式是在AndroidManifest.xml文件里的application标签下添加如下代码:


<!-- 允许绘制到小米刘海屏机型的刘海区域 -->
<meta-data
android:name='notch.config'
android:value='portrait' />

<!-- 允许绘制到华为刘海屏机型的刘海区域 -->
<meta-data
android:name='android.notch_support'
android:value='true' />

<!-- 允许绘制到oppo、vivo刘海屏机型的刘海区域 -->
<meta-data
android:name='android.max_aspect'
android:value='2.2' />


另外,对于Android 5.0以下的手机,适配完刘海屏后会在顶部多一块黑色半透明的View,那我们将其改成全透明的,修改onCreate()方法如下:


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
StatusBarUtils.setTransparent(this);
// 适配刘海屏
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
WindowManager.LayoutParams layoutParams = getWindow().getAttributes();
layoutParams.layoutInDisplayCutoutMode =
WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES;
getWindow().setAttributes(layoutParams);
}
// 适配Android 4.4
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
StatusBarUtils.setColor(getWindow(), Color.TRANSPARENT, true);
}
}

这样,启动页的效果就适配好了,效果如下:

640?wx_fmt=png

弹窗


对于弹窗,只有全屏弹窗才能修改状态栏文字的颜色。详见:
https://jimmysun.blog.csdn.net/article/details/88892557


/ 总结 /


以上就是全部代码了,同时我也放在GitHub上了,详见:
https://github.com/jimmysuncpt/ImmersionStatusBar


点赞
4
收藏
4
回复
5
分享
举报
浏览765 发布于2019-11-01 05:23未知归属地
全部评论
最多点赞
最新发布
最早发布

你好, 使用华为手机做android开发的时候, 使用androidstudio调试发现断点5s, 就自动断开了. 这个问题能反馈一下吗.这个问题出现好几年了,几乎新出的手机都有这个问题,论坛一直有人反馈,但是都是踢皮球式的, 没解决.

5楼回复于2020-04-25 01:49 未知归属地

楼主您好,你写的很通透,敬佩!

4楼回复于2020-04-22 02:32 未知归属地

真的不错,我觉得这帖子有内涵

3楼回复于2020-04-20 02:23 未知归属地

这个必须顶呀,太有深度了

2楼回复于2020-04-19 06:21 未知归属地

还可以啊,多谢分享


1楼回复于2019-11-01 15:51 未知归属地
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
  • 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
  • 如您发布的内容为转载内容,请注明内容来源。

我要发帖子

目录 收起
启动页
弹窗
了解社区公约,与您携手共创和谐专业的开发者社区。