经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android开发模版代码(4)——状态栏设置 - Stars-one
来源:cnblogs  作者:Stars-one  时间:2019/10/8 9:05:32  对本文有异议

下面的代码是基于开源项目SystemBarTint,我们需要添加其依赖

  1. compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'

下面的代码,我在类原生的Android7.0系统测试通过,其他的国产ROM系统未进行测试

设置状态栏白色

1. 设置主题theme

在AndroidManifest文件中,设置theme

按住Ctrl,点开那个theme,修改theme

2. 设置xml文件

之后在xml文件中的根节点,添加属性android:fitsSystemWindows="true",同时,把背景颜色设置为白色(这一步背景色可以不设置,我的项目整体是白色的,看你需求)

3. 添加代码

下面的是把状态栏设置为白色,字体和图标颜色设置为黑色的代码,复制一份,之后Activity对应的java文件中的setContentView之前调用setWhiteBar(this)方法即可

我是把下面的代码封装到了一个状态栏工具类,之后调用

  1. public static void setWhiteBar(Activity activity) {
  2. //设置状态栏为全透明
  3. transparencyBar(activity);
  4. //设置状态栏为白色
  5. SystemBarTintManager tintManager = new SystemBarTintManager(activity);
  6. tintManager.setStatusBarTintEnabled(true);
  7. tintManager.setStatusBarTintResource(R.color.color_white);
  8. //设置状态栏字体和图标为黑色
  9. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  10. activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
  11. }
  12. }
  13. /**
  14. * 修改状态栏为全透明
  15. *
  16. * @param activity
  17. */
  18. @TargetApi(19)
  19. public static void transparencyBar(Activity activity) {
  20. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  21. Window window = activity.getWindow();
  22. window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
  23. window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
  24. | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
  25. window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  26. window.setStatusBarColor(Color.TRANSPARENT);
  27. } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
  28. Window window = activity.getWindow();
  29. window.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
  30. WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
  31. }
  32. }

Activity.java

  1. @Override
  2. protected void onCreate(Bundle savedInstanceState) {
  3. super.onCreate(savedInstanceState);
  4. StatusBarUtil.setWhiteBar(this);
  5. setContentView(R.layout.activity_main);
  6. }

其他补充

改变状态栏颜色

如果是单纯地改变状态栏颜色,只需要使用下面的方法即可

  1. @TargetApi(Build.VERSION_CODES.LOLLIPOP)
  2. public static void setStatusBarColor(int statusColor, Activity activity) {
  3. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  4. Window window = activity.getWindow();
  5. //取消设置Window半透明的Flag
  6. window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
  7. //添加Flag把状态栏设为可绘制模式
  8. window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
  9. //设置状态栏颜色
  10. window.setStatusBarColor(statusColor);
  11. }
  12. }

动态设置状态栏字体颜色

可以通过设置一个boolean,来判断当前状态栏的颜色是否为亮色,如果为亮色,则设置为黑色图标,如果为暗色,则设置为白色图标

  1. boolean isLightColor;
  2. int color= Color.parseColor("#f0f0f0");
  3. double v = ColorUtils.calculateLuminance(color);
  4. //判断颜色亮色
  5. if(v>=0.5){
  6. isLightColor = true;
  7. }else{
  8. isLightColor = false;
  9. }
  10. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
  11. if(isLightColor){
  12. //设置黑色字体颜色
  13. activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
  14. }else{
  15. //设置白色字体颜色
  16. activity.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
  17. }
  18. }

参考链接:Android沉浸式和状态栏颜色的修改

原文链接:http://www.cnblogs.com/kexing/p/11619708.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号