實現設置系統狀態欄顏色需要至少在Android 4.4.2(API 19)以上。這是因爲,在這個版本以下,沒有任何的API可以幫助我們來實現。
下面在項目中不需要改代碼更不需要改style文件,更不用爲不同的系統版本創建不同的style文件來實現這個功能?
完全可以不用,因爲我已經對它做了封裝。你只需要兩步,就可以完成。
一、在項目的build.gradle
中聲明以下依賴:
compile 'com.githang:status-bar-compat:latest.integration'
二、在你的Activity中(最好是
setContentView()
被調用之後)添加以下代碼:
StatusBarCompat.setStatusBarColor(this, color, lightStatusBar);
就這樣可以使用了。
後記:
在Android 6.0設置狀態欄的顏色的方法與上面的一致,慶幸的是,它的設置有效:
//取消設置透明狀態欄,使 ContentView 內容不再覆蓋狀態欄
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//需要設置這個 flag 才能調用 setStatusBarColor 來設置狀態欄顏色
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//設置狀態欄顏色
window.setStatusBarColor(color);
由於與API 19設置狀態欄半透明並添加一個View的實現方式不同,這裏是直接設置狀態欄的顏色的,所以如果我們的狀態欄被設爲白色的話,上面同樣白色的系統狀態就看不到了。不過,6.0的API新增了一個屬性來解決這一問題。即,如果我們設置的狀態欄顏色是接近於白色的話,可以在主題中添加以下屬性:
<item name="android:windowLightStatusBar">true</item>
這樣,系統狀態的那些文字圖標就會變成黑色了