最近開發天氣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"
一定要是根佈局!!!
好了,這樣就完成了,雖然步驟很少,但是我在解決的時候還是花了很多功夫,希望對大家有幫助,少走彎路。