沉浸式状态栏和fragment结合,实现全屏动态天气下雨主题

        最近开发天气App时遇到一个不大的问题,但是解决起来我还是花了不少时间的,分享给大家一下,希望可以帮助遇到同样问题的小伙伴。

        需求是实现天气动态主题的下雨下过,就是背景要有下雨的效果,最终的效果就是这样的:


    (雨滴是在动的,因为不会发动态的0.0)        

但是在实现这个效果的时候,遇到了无法覆盖状态栏的问题,我在网上找了很多方法,主要思路就是设置状态栏为透明,但是这样的话,状态栏只是会显示白色,并不能做到沉浸式的效果。   

        然后我就想到的是这样解决,首先要在MainActivity中不要设置fitsSystemWindows这个属性,因为这个属性如果你设置为true的话,就会给状态栏留一定的位置,然后在MainActivity里面添加Fragment,这样在里面设置他的fitsSystemWindows为true,就可以给Activity状态栏留标准的位置。

        下面就让我们来看下具体的代码吧!

        首先关于动态壁纸的内容我借鉴了另外一个大神的代码,这里贴下他的地址,真的是非常感谢他:

            https://www.jb51.net/article/107931.htm

        然后我们就来做关于如何让他全屏的操作。第一步:让状态栏的背景透明:

if(Build.VERSION.SDK_INT >= 21) {
    View decorView = getWindow().getDecorView();
    //让应用主题内容占用系统状态栏的空间,注意:下面两个参数必须一起使用 stable 牢固的
    int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN|View.SYSTEM_UI_FLAG_LAYOUT_STABLE;
    decorView.setSystemUiVisibility(option);
    //设置状态栏颜色为透明
    getWindow().setStatusBarColor(Color.TRANSPARENT);
}

        网上很多人说在代码中设置比在styles中设置更能起效果,说有些机型不能透明化,这个我没试过。

        第二步就是在MainActivity中的Fragment布局的最外围控件设置属性:

android:fitsSystemWindows="true"

        一定要是根布局!!!

        好了,这样就完成了,虽然步骤很少,但是我在解决的时候还是花了很多功夫,希望对大家有帮助,少走弯路。