Android 5.0 及以上實現方式(android在5.0之后引入Material Design 實現方式相對簡單)
透明狀態欄,背景浸入狀態欄
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
在布局文件中View 默認fitsSystemWindows 值為 false 因此會看到整個布局是從最頂端開始的,如果布局頂端有TextView 會看到狀態欄覆蓋了TextView。這種情況下可以針對特定的布局設置
android:fitsSystemWindows="true"
哪個view設置了這個屬性為true,系統就會調整該view的padding值來留出空間給系統窗體。表現為,padding出status bar的高度給status bar使用,不至于我們定義layout跟status bar重疊!
著色狀態欄
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Window window = getWindow();
// 有些情況下需要先清除透明flag
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.setStatusBarColor(getResources().getColor(R.color.green));
}