Android 状态栏那些小坑()

眼前多少难甘事,自古男儿当自强。这篇文章主要讲述Android 状态栏那些小坑?相关的知识,希望能为你提供帮助。
背景:因为之前老板上次问我我们的app能不能自定义上面的状态栏我说可以啊! 当时没管, 今天试了下果然很多坑, 之前github上也有很多大佬写了一个开源库有兴趣的可以点进去看下支持DrawLayout沉侵式[StatusBarUtil](https://github.com/laobie/StatusBarUtil)感觉好牛逼, 像大佬敬礼, 我毕竟是个小喽喽, 我只能用最蠢的办法!

首先说下关于状态栏当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏实现代码 其实状态栏这东西不是很难, 就是通过添加一个跟转态栏一样的View, 但是你要计算状态栏的高度不然就会出现重影或者顶上去了, 哈哈! 下面看看我之前怎么顶上去的, 很厉害的哟!
* 动态的设置状态栏实现沉浸式状态栏 * */ private void initState() {//当系统版本为4.4或者4.4以上时可以使用沉浸式状态栏 if (Build.VERSION.SDK_INT > = Build.VERSION_CODES.KITKAT) { //透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS); //透明导航栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION); // LinearLayout linear_bar = (LinearLayout) findViewById(R.id.ll_bar); linear_bar.setVisibility(View.VISIBLE); //获取到状态栏的高度 int statusHeight = getStatusBarHeight(); //动态的设置隐藏布局的高度 LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) linear_bar.getLayoutParams(); params.height = statusHeight; linear_bar.setLayoutParams(params); } }/** * 通过反射的方式获取状态栏高度 * * @ return */ private int getStatusBarHeight() { try { Class< ?> c = Class.forName(" com.android.internal.R$dimen" ); Object obj = c.newInstance(); Field field = c.getField(" status_bar_height" ); int x = Integer.parseInt(field.get(obj).toString()); return getResources().getDimensionPixelSize(x); } catch (Exception e) { e.printStackTrace(); } return 0; } }

我这里直接封装到我的BaseActivity因为每个Activity` 这里写代码片` 都要用到, 代码都不难, 想想我们那么多前辈把自己辛苦写的东西全部贡献给github这个大家庭, 所以你家里的东西随便拿来用就行了, 所以妈妈再也不用担心您不会撸码了, 撸着袖子就是干, 年轻人不要怂! 我这里这是拿着别人的代码, 但是用了别人至少给个star不要那么小气, 人家写代码也很辛苦的对不对! 废话不多说! 看我顶顶顶!
Android 状态栏那些小坑()

文章图片


看到没有状态栏的高度, 到这里你千万别忘了我们还有TitleBar那些, 现在该怎么办?
小伙伴们? 怎么解决, 一般老司机会这样想:”能不能给个View把他顶上去”, 答案是肯定可以的的啦!

但是对于我这种菜鸟我想不到, 想不到怎么办? 问题总要解决, 生活还得继续, 于是乎想了一下, 我还是不知道?
Android 状态栏那些小坑()

文章图片


好坏好坏的, 硬是不给我出来! 好坏好坏的!
努力思考中………..
Android 状态栏那些小坑()

文章图片


咚咚咚 咚咚咚

好吧 好像忘记了什么? 我记得好像有个fixSystemWindow设置为true不就行了吗哈哈, 试试

但是有点问题, 有些可以, 有些不可以, 再看看,
Android 状态栏那些小坑()

文章图片

Android 状态栏那些小坑()

文章图片


最后添加个样式
< style name= " NoStatusStyle" parent= " AppTheme" > < item name= " android:windowTranslucentStatus" > true< /item> < !--状态栏为透明,如果设置为false, 则没有黑色条盖住, 见下图对比--> < item name= " android:windowTranslucentNavigation" > true< /item> < !--导航栏为透明--> < item name= " android:statusBarColor" > @ android:color/holo_green_light< /item> < /style>

然后在每一个Activity中添加这样的属性除了那些全屏的Activity这里大家都懂哈!
android:fitsSystemWindows= " true" style= " @ style/NoStatusStyle"

完美解决! 让我亲吻下大地!
推荐文章: 1. Android 沉浸式状态栏的三种实现方式
2.Android 沉浸状态栏
写到最后: kotlin
>
好的文章要学会分享, 话说今天是GoogleIO大会, 以后我们可能慢慢的跟科特林大哥学习了, 暂时跟java老哥, 挥泪告别, 这个肯定有一段的距离肯定要等到As完美兼容到这里踩坑基本结束, 我知道大家还有其他很多方法。大家可以在下面留言, 我会虚心接受, 转载请注明出处! 每天跟代码在一块忍受着孤独与寂寞, 但是英雄注定孤独的嘛! 我现在是菜鸟, 总有一天我也会成为老司机的吗? 哈哈玩笑,不管是科特林还是Java编程永远无止境!
结束语:

听说会点赞的人运气不会太差不信你试试!
【Android 状态栏那些小坑()】

    推荐阅读