背景:因为之前老板上次问我我们的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不要那么小气,人家写代码也很辛苦的对不对!废话不多说!

看我顶顶顶!

看到没有状态栏的高度,到这里你千万别忘了我们还有TitleBar那些,现在该怎么办?

小伙伴们?怎么解决,一般老司机会这样想:”能不能给个View把他顶上去”,答案是肯定可以的的啦!

但是对于我这种菜鸟我想不到,想不到怎么办?问题总要解决,生活还得继续,于是乎想了一下,我还是不知道?

好坏好坏的,硬是不给我出来!好坏好坏的!

努力思考中………..

咚咚咚 咚咚咚

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

但是有点问题,有些可以,有些不可以,再看看,

最后添加个样式

 <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编程永远无止境!

结束语:

听说会点赞的人运气不会太差不信你试试!

最新文章

  1. Sprint three
  2. Java中的异常处理:何时抛出异常,何时捕获异常?
  3. Ubuntu FTP 配置
  4. CodeForces 705A(训练水题)
  5. tomcat的安装
  6. Socket解决粘包问题1
  7. Http,Https (SSL)的Url绝对路径,相对路径解决方案Security Switch 4.2 中文帮助文档 分类: ASP.NET 2014-10-28 14:09 177人阅读 评论(1) 收藏
  8. 如何实现SQL事务的提交,又不对外进行污染
  9. C#用 excel 作为模板打印
  10. 20165232 week1 kali安装
  11. javascript 动态修改css样式
  12. 【VBA】数组定义时,括号内的数值n为最大下标,其长度为n+1
  13. maven jdk 版本配置
  14. 操作系统介绍-操作系统历史,IO,进程的三态,同步异步阻塞非阻塞
  15. week5 03 continus loading news
  16. 20145334赵文豪 WEB基础实践
  17. OpenGL遮挡查询
  18. Python 断言 assert 的用法
  19. js firstChild 、nextSibling、lastChild、previousSibling、parentNode
  20. Ubuntu 安装 Telnet

热门文章

  1. 20145310 《Java程序设计》第2周学习总结
  2. 2_jenkins_git创建创建及项目构建
  3. MySQL修改max_allowed_packet
  4. gulp构建例子(ubuntu)
  5. Java虚拟机内存区域划分
  6. OKR学习总结
  7. &quot;ImportError: cannot import name OVSLegacyKernelSwitch&quot;
  8. JSch 实现 SSH 端口转发
  9. 使用cxf调用webservice
  10. String类的subString(a,b)方法(基于jdk 1.9)