安卓沉浸式(透明)状态栏学习小结

想做出好看的界面,看到扣扣界面状态栏和toolbar(Actionbar)颜色一样,就查了一下:

沉浸状态栏

这里写图片描述
就是顶部状态栏变得透明,背景变为activity的背景;
要求版本是5.0以上,不过现在应该没有不符合的了(minsdk 21)

第一步
以下二选一

**一**
   java文档里改
  if (Build.VERSION.SDK_INT >= 21) {
            View decorView = getWindow().getDecorView();
            int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
            decorView.setSystemUiVisibility(option);
            getWindow().setStatusBarColor(Color.TRANSPARENT);
        }  
    这个需要在每一个activity里写,在`setContentView(R.layout.XXX)`后面声明就可以
  **二**
    在style里改,在style里增加一个新项
   <item name="android:windowTranslucentStatus">true</item>  
    在style的theme里增加这一项,所有使用这个theme的activity都自动这样

第二步
写到这里运行就会发现一些问题,如图这里写图片描述
可以看到,状态栏的颜色变了,但是actionbar却被挤压了,这是因为状态栏透明后,整个布局向上平移,却不能遮盖状态栏,因此就挤压了actionbar里面的内容
改进方法,在activity布局里的第一个组件里增加一句

    android:fitsSystemWindows="true"
这样就会发现上部给状态栏留出了空隙

## **第三步** ##

      这时候会发现还是有bug,第一,当第一个布局是toolbar时,第二步无效;
      第二,当有drawlayout时,只有drawlayout有这种效果,主界面没有;第三,当含有include布局时,各种bug

      所以直接来最终方法:第二部的就是为了给状态栏留一个空间,可以直接在第一个布局上声明状态栏的高度是25dp,

      我们直接留出25dp就可以了,所以只需1.3两步就可以了
      *然后又想起一个问题,当有抽屉布局时对于主界面这个效果是无法实现的,因为有drawlayout的通常只有一个,所以可以把theme的
      colorparimydark设置成和这个activity的actionbar颜色一样,也算投机取巧吧*

到此结束,感觉界面的坑好深好深

猜你喜欢

转载自blog.csdn.net/heshuyu123/article/details/78024846