Android 5.0(API 21)之后就可以对系统状态栏进行设置了,这里我不是想深入讨论对系统状态栏的一些高级设置,因为一般也用不到,我只想说最常见的两种场景

隐藏系统状态栏,这就是感觉很牛逼的沉浸式状态栏

状态栏颜色变化后状态栏显示内容颜色随之改变

1. 沉浸式状态栏

这种最简单,只需要拿到当前activity window的DecorView,然后设置setSystemUiVisibility()即可。

示例:

Window window = activity.getWindow();

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

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

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.setStatusBarColor(Color.TRANSPARENT);

}

其实想要沉浸式状态栏,只需要设置View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN属性足够了,其他的只是些通用做法。比如View.SYSTEM_UI_FLAG_LAYOUT_STABLE是设置状态栏字体颜色还是跟随系统。window.setStatusBarColor(Color.TRANSPARENT)是设置状态栏为全透明。

上面代码的作用就是状态栏的高度没有了,但是注意状态栏的显示还是有的,就是这样:

是不是很丑?这时候你的产品经理肯定会不满意,要你改,我猜他是不是想要这种效果:

如果我猜对了,那么就继续看吧!

2. 重新设置你的TitleBar

这个解决方法更简单,就是改变TitleBar的高度和paddingTop,看下面示例就会豁然开朗:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {

ViewGroup.LayoutParams params = view.getLayoutParams();

int topMargin = getStatusBarHeight(view.getContext());

params.height = params.height + topMargin;

view.setPadding(view.getPaddingLeft(), view.getPaddingTop() + topMargin, view.getPaddingRight(), view.getPaddingBottom());

view.setLayoutParams(params);

}

这里的view当然就是你的TitleBar,状态栏的颜色是你的TitleBar的背景色。效果见上图。

getStatusBarHeight(context)应该不用我说了,不会的话自己百度。

3. 设置状态栏显示字体内容颜色

这种场景很常见,比如上面的图,如果你的TitleBar是白色或者浅色,那么你状态栏的显示内容将会看不见,或者很丑。

这个时候你需要改变你状态栏显示内容的颜色,只有几行代码:

Window window = activity.getWindow();

if (ColorUtils.calculateLuminance(color) >= 0.5) {

window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

} else {

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

}

color就是你设置的状态栏颜色,或者说是TitleBar的背景色,但注意这是一个int值,不是resourceId。

ColorUtils.calculateLuminance(color) >= 0.5的作用只是确定这个颜色是亮色还是暗色。

View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR是帮你把状态栏显示内容变成黑色,而View.SYSTEM_UI_FLAG_LAYOUT_STABLE是跟随系统。

小结

学会以上三点,你基本可以交差了,但是下面的这种场景你应该还是要知道。

4. 状态栏着色

可能由于某种特定原因,你可能想给状态栏设置另外一种颜色,那么这也很简单:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {

Window window = activity.getWindow();

window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

window.setStatusBarColor(getResources().getColor(R.color.your_color));

}

比如下图我把状态栏设置成黑色:

android实现系统状态栏的隐藏方法,Android隐藏系统状态栏(沉浸式状态栏)和设置状态栏颜色...相关推荐

  1. Android布局延伸状态栏,Android沉浸式全屏讲解(状态栏、导航栏处理)

    Android应用中经常会有一些要求全屏显隐状态栏导航栏的需求.通过全屏沉浸式的处理可以让应用达到更好的显示效果.下面系统的讲解一下有关全屏,隐藏状态栏导航栏,沉浸式的知识. 在Android4.1之 ...

  2. Android状态栏微技巧,带你真正理解沉浸式模式

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/51763825 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭 ...

  3. android 沉浸式菜单栏,Android沉浸式全屏讲解(状态栏、导航栏处理)

    Android应用中经常会有一些要求全屏显隐状态栏导航栏的需求.通过全屏沉浸式的处理可以让应用达到更好的显示效果.下面系统的讲解一下有关全屏,隐藏状态栏导航栏,沉浸式的知识. 在Android4.1之 ...

  4. (转)Android状态栏微技巧,带你真正理解沉浸式模式

    版权声明:本文出自郭霖的博客,转载必须注明出处. https://blog.csdn.net/sinyu890807/article/details/51763825 转载请注明出处:http://b ...

  5. 《Android状态栏微技巧,带你真正理解沉浸式模式(转载)》

    最近爱上了郭神的文章,不禁转发一下~~ 转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/51763825 本文同步发表于我的微信公众号 ...

  6. Android状态栏微技巧,带你真正理解沉浸式模式(转)

    转载自:http://blog.csdn.net/guolin_blog/article/details/51763825 记得之前有朋友在留言里让我写一篇关于沉浸式状态栏的文章,正巧我确实有这个打算 ...

  7. android沉浸式模式简书,Android 沉浸式模式与常见状态栏和导航栏效果

    Android沉浸式模式 官方称沉浸式状态栏为沉浸式模式. 什么是沉浸式? 沉浸式就是让人专注当前的(由设计者营造)情境下感到愉悦和满足,而忘记真实的情境. 什么是Android中的沉浸式? 当启用该 ...

  8. (AS笔记)Android全透明沉浸式主题样式——顶部状态栏+底部导航栏

    目录 1.前言 2.自定义主题theme 3.全透明沉浸式主题theme 4.设置状态栏颜色(Android 5.0+) 5.设置状态栏半透明 6.设置状态栏全透明 7.设置底部导航栏半透明 8.全透 ...

  9. android 沉浸式之改变小米状态栏颜色

    这个是基于SystemBarTintManager更改的 增加一个方法:用于更改MIUIV6系统上的状态栏字体颜色 ,目前我仅仅只发现MIUIV6上可以更改,在android5.0上以及其它4.4以上 ...

最新文章

  1. gpg加密命令 linux_用 PGP 保护代码完整性(五):将子密钥移到一个硬件设备中 | Linux 中国...
  2. ios ble 参考
  3. reverse() 几种操作
  4. sparkmllib scala NaiveBayes Demo
  5. php workman 多线程,workerman如何多线程
  6. Metro 应用无法打开解决办法
  7. aix下oracle 12.1.0.2 asmca不能打开的故障
  8. 因为太难而被禁用的17道Google面试题
  9. 视觉SLAM十四讲_1_简介
  10. 汉诺塔游戏玩法介绍(攻略和编程实现)
  11. Vue中base64编码和解码
  12. python 热度图_keras CNN卷积核可视化,热度图教程
  13. Matlab中max函数用法
  14. Fruit 有上下限的母函数
  15. 零输入响应,零状态响应和完全响应
  16. 支持DISTINCT的通用分页存储过程(SQL2005)
  17. 方法的调用,构造方法,方法的重载
  18. 秀一下大连TimesTen 18.1培训的结业证
  19. 六度分离【Floyd】
  20. python 实时获取股票行情脚本

热门文章

  1. B. Fridge Lockers
  2. 最大加权矩形 压缩+前缀和+dp
  3. P1719 最大加权矩形【前缀和】
  4. select的执行顺序
  5. 让生活多点儿青春的气息
  6. 【新年好】为什么要 spring-session?
  7. js处理腾讯地图经纬度转换百度地图经纬度
  8. Linux查看隐藏文件和文件夹
  9. 有衬线字体和无衬线字体。
  10. php连接mysql 500错误日志_php javascript从mysql获取数据会在服务器端产生500错误