然后在我們的的方法中使用以上代碼就可以了。
問題及解決方法
但是在使用之后,我們會發現,我們的布局內容頂到了狀態欄上去了,被狀態欄及所覆蓋。解決方法很簡單,只需要在我們的布局文件的根元素中設置以下屬性:
:="true"
它的意思是使這個內嵌,也就是會為狀態欄等留出空間,于是我們的布局就恢復正常了。
但是問題來了,假如你有幾十個,每一個都要修改它的布局文件,是一件讓人沮喪的事情。于是,一番查找之后,我們似乎找到了答案。即通過在主題中配置這個屬性。遺憾的是我們發現這樣做之后,我們的Toast顯示就不正常了,它的文字會超出黑色背景之外。
不過沒關系,我們還有解決方法。那就是在()之后,加入以下代碼:
= () .(.); View = .(0); if ( != null) { //注意不是設置 的 , 而是設置 的第一個子 View . 預留出系統 View 的空間. .(); }
也就是在JAVA代碼中找到我們的內容的View,并給它設置這個屬性。
5.0.1
在 5.0.1(API 21)起修改狀態欄顏色,官方又為我們引入了一些特性,包括一個重要的方法:
.(color);
看起來似乎很激動人心。要使它生效,必須設置一個屬性,并且確保TUS不被設置。
那好,我們來實現:
= .(); //取消設置透明狀態欄,使 內容不再覆蓋狀態欄 .(..TUS); //需要設置這個 flag 才能調用 來設置狀態欄顏色 .(..); //設置狀態欄顏色 .(color);
遺憾的是,在我手上的P7上并沒有任何效果。據說要在主題當中設置屬性,但是我試過之后發現狀態欄還是沒有被設成我想要的顏色,并且可能顯示成其他顏色。所以這種方法我最終沒有采用。
6.0
6.0設置狀態欄的顏色的方法與上面的一致,慶幸的是,它的設置有效,代碼同上:
//取消設置透明狀態欄,使 內容不再覆蓋狀態欄 .(..TUS); //需要設置這個 flag 才能調用 來設置狀態欄顏色 .(..); //設置狀態欄顏色 .(color);
《學習筆記總結+最新移動架構視頻+大廠安卓面試真題+項目實戰源碼講義》無償開源 徽信搜索公眾號【編程進階路】
由于與API 19設置狀態欄半透明并添加一個View的實現方式不同修改狀態欄顏色,這里是直接設置狀態欄的顏色的,所以如果我們的狀態欄被設為白色的話,上面同樣白色的系統狀態就看不到了。不過,6.0的API新增了一個屬性來解決這一問題。即,如果我們設置的狀態欄顏色是接近于白色的話,可以在主題中添加以下屬性:
true
這樣,系統狀態的那些文字圖標就會變成黑色了,如一開始我們所看到的第三張圖。
通過JAVA代碼來設置的話如下:
View decor = .(); int ui = decor.y(); if () { ui |=View.; } else { ui &= ~View.; } decor.y(ui);
如何快速的實現
=======
那么,你真的要在項目中根據不同系統版本來寫這么多代碼嗎?還要改style文件?為不同的系統版本創建不同的style文件來實現這個功能?
完全可以不用,因為我已經對它做了封裝。你只需要兩步,就可以完成。
在項目的build.中聲明以下依賴:
'com.:-bar-:.'
在你的中(最好是()被調用之后)添加以下代碼:
.(this, color, );
不用考慮版本,不用考慮問題,不用考慮狀態欄被設置成白色后看不到系統狀態的問題,并且兼容MIUI及Flyme。那么,當你在6.0的手機上看習慣這種純色的狀態欄之后,是不是覺得手機QQ在6.0上還在用著半透明狀態欄會帶陰影來實現的設置狀態欄顏色的效果好丑?