天天看點

沉浸式狀态欄和fragment結合,實作全屏動态天氣下雨主題

        最近開發天氣App時遇到一個不大的問題,但是解決起來我還是花了不少時間的,分享給大家一下,希望可以幫助遇到同樣問題的小夥伴。

        需求是實作天氣動态主題的下雨下過,就是背景要有下雨的效果,最終的效果就是這樣的:

沉浸式狀态欄和fragment結合,實作全屏動态天氣下雨主題

    (雨滴是在動的,因為不會發動态的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"      

        一定要是根布局!!!

        好了,這樣就完成了,雖然步驟很少,但是我在解決的時候還是花了很多功夫,希望對大家有幫助,少走彎路。