android应用中状态栏颜色和标题栏保持一致

来源:互联网 发布:python 服务器监控 编辑:程序博客网 时间:2024/06/15 16:57

谷歌在4.4之后允许开发者自定义状态栏的颜色,这是不错的体验。这里只谈代码的实现方式,配置到BaseActivity里,这样自定义的activity在继承BaseActivity后就都可以实现这样的效果了。


创建BaseActivity之后,在onCreate()方法中,setContentView()方法前做如下处理:

Override  protected void onCreate(Bundle savedInstanceState) {      super.onCreate(savedInstanceState);      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {               setTranslucentStatus(true);               SystemBarTintManager tintManager = new SystemBarTintManager(this);               tintManager.setStatusBarTintEnabled(true);               tintManager.setStatusBarTintResource(R.color.top_bg_color);//通知栏所需颜色         }        setContentView(R.layout.main_activity);  }    @TargetApi(19)        private void setTranslucentStatus(boolean on) {           Window win = getWindow();           WindowManager.LayoutParams winParams = win.getAttributes();           final int bits = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;           if (on) {               winParams.flags |= bits;           } else {               winParams.flags &= ~bits;           }           win.setAttributes(winParams);       }  

SystemBarTintManager需要引用三方的类库,在AS中可以直接输入SystemBarInt搜索。实现效果如图:

但是实际上标题栏被提了上去,APP界面全屏了,状态啦遮挡了一部分APP的界面,所以还要做如下处理:在Activity布局文件的最外层添加属性:

android:fitsSystemWindows="true"
这样就可以达到预期的效果。