沉浸式狀態欄和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"

        一定要是根佈局!!!

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