背景:因为之前老板上次问我我们的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编程永远无止境!

结束语:

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

[置顶] Android 状态栏那些小坑?的更多相关文章

  1. [置顶] Android开发笔记(成长轨迹)

    分类: 开发学习笔记2013-06-21 09:44 26043人阅读 评论(5) 收藏 Android开发笔记 1.控制台输出:called unimplemented OpenGL ES API ...

  2. [置顶] Android Glide传Context引发的非法参数异常那些小坑

    今天中午调试一直出现nullContext 我的代码如下 解决办法: Glide.with(mContext) .load(mdl.getImage()) .centerCrop() .placeho ...

  3. [置顶] Android App引导页这些坑你自己犯过吗?

    场景:测试机:华为荣耀6x 今天我自己掉入一个很蠢蠢的坑,一个引导页搞了20多分钟,不管我怎么测试用真机还是模拟器都无法运行,但是我写的demo完全没问题,好无语,我都怀疑我是不是搞android,我 ...

  4. [置顶] Android AlarmManager实现不间断轮询服务

    在消息的获取上是选择轮询还是推送得根据实际的业务需要来技术选型,例如对消息实时性比较高的需求,比如微博新通知或新闻等那就最好是用推送了.但如果只是一般的消息检测比如更新检查,可能是半个小时或一个小时一 ...

  5. 【转】 [置顶] Android 通知栏Notification的整合 全面学习 (一个DEMO让你完全了解它)

    在Android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...

  6. [置顶] Android开发百科全书

    友情提示根据目录 快速查找问题 %1$s %1$d Android string 1.整型,比如"我今年23岁了",这个23是整型的.在string.xml中可以这样写,<s ...

  7. [置顶] Android 适配真要命?

    原始尺寸场景 相信大家对上面也有所有耳闻另外就是如何计算屏幕的密度一般都是按照勾股定理例如中等屏幕密度 480^2+800^2开根号 然后除以当前屏幕尺寸3.5-4.2之间尺寸. 对于刚出来的那些An ...

  8. [置顶] [Android源码分析]inquiry result引起的上层变化分析

    在上一篇文章中,我们详细分析了android是如何解析蓝牙反馈上来的搜索到的设备信息,本文将会继续分析这些信息到了上层之后是如何处理. 8.inquiry result引起的上层变化 我们知道inqu ...

  9. [置顶] Android访问控制系统测试与评估

    5.1实验方案 通过以上章节,本文阐述了目前Android平台上的恶意软件以“隐私窃取”和“恶意扣费”类为主,本研究课题访问控制的目标也正是阻止恶意软件“隐私窃取”和“恶意扣费”的行为,因此,本实验方 ...

随机推荐

  1. 20145322《Java程序设计》第2次实验报告

    20145322<Java程序设计>第2次实验报告 实验步骤与内容 一.实验内容 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4. ...

  2. 20145324 《Java程序设计》第1周学习总结

    20145324 <Java程序设计>第1周学习总结 教材学习内容总结 1.Java是程序语言.标准规范.代表解决问题的平台 2.三大平台:Java SE(JVM.JRE.JDK与Java ...

  3. 20135302魏静静——linux课程第四周实验及总结

    linux课程第四周实验及总结 一.实验 我选择的是第20号系统调用,getpid 代码如下: /* getpid.c */ #include <unistd.h> #include &l ...

  4. openwrt设置uboot环境变量在flash上的存储地址

    1.分析如下 ubootenv_add_app_config ubootenv_add_uci_config "/dev/mtd1" "0x40000" &qu ...

  5. [CF914D]Bash and a Tough Math Puzzle

    给定一个数列$a_1,a_2,...,a_n$,支持两种操作 1 l r x,猜测数列中[l,r]位置上的数的最大公约数$x$,判断这个猜测是否是接近正确的.如果我们可以在数列[l,r]位置中改动至多 ...

  6. LeetCode——Unique Binary Search Trees II

    Question Given an integer n, generate all structurally unique BST's (binary search trees) that store ...

  7. [PyTorch]PyTorch中模型的参数初始化的几种方法(转)

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 本文目录 1. xavier初始化 2. kaiming初始化 3. 实际使用中看到的初始化 3.1 ResNeXt,de ...

  8. vue-router的一个小实例

    非2.0的 vue2.0还有vue-router2.0的改变还是挺大的 vue-router是Vue.js官方的路由插件,它和vue.js是深度集成的,适合用于构建单页面应用.vue的单页面应用是基于 ...

  9. exit()子程序终止函数与return()函数的差别

    在main函数中我们通常使用return (0);这样的方式返回一个值. 但这是限定在非void情况下的也就是void main()这样的形式. exit()通常是用在子程序中用来终结程序用的,使用后 ...

  10. 分布式MySql

    # 分布式MySql 部署方案---1. 解决方案2. 系统环境3. mysql 主从备份4. MyCat 中间件搭建5. haproxy 负载代理6. keepalived 解决单点故障7. myc ...