android設定狀態列顏色(沉浸式狀態列)
阿新 • • 發佈:2019-02-13
設定狀態列顏色的方法是andorid4.4以後支援的,最少要api19以上才可以使用喲。
方法如下:
第一種↓
public static void setStatusBarTranslucent(ViewGroup vg, Activity activity) {
// 如果版本在4.4以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 狀態列高度
int height = getStatusBarHeight(activity);
if (height <= 0) {
return;
}
// 設定距離頂部狀態列垂直距離
vg.setPadding(0, height, 0, 0);
// 狀態列透明
activity.ge tWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
// 導航欄透明
// activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
}
}
public static int getStatusBarHeight(Activity activity) {
int height = 0;
int resourceId = activity.getResources().getIdentifier("status_bar_height", "dimen",
"android");
if (resourceId > 0) {
height = activity.getResources().getDimensionPixelSize(resourceId);
}
return height;
}
第二種↓
private static void setStatusBarTranslucent(ViewGroup vg, Activity activity, int color) {
// 如果版本在4.4以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 狀態列高度
int height = getStatusBarHeight(activity);
if (height <= 0) {
return;
}
View statusBarView = new View(activity);
ViewGroup.LayoutParams lp = new
ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
getStatusBarHeight(activity));
statusBarView.setBackgroundColor(color);
// 給佈局新增一個狀態列高度,自定義顏色的View
vg.addView(statusBarView, lp);
// 狀態列透明
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
第三種↓
public static void setStatusBarTranslucent(Activity activity,int color) {
// 如果版本在4.4以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 狀態列透明
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
SystemBarTintManager tintManager = new SystemBarTintManager(activity);
tintManager.setStatusBarTintEnabled(true);
tintManager.setStatusBarTintResource(color);
}
}
第2,3種方法
需要在佈局檔案中加入下面兩個屬性:
android:clipToPadding=”true”
android:fitsSystemWindows=”true”
android:clipToPadding 定義佈局間是否有間距
android:fitsSystemWindows 這個屬性,主要是通過調整當前設定這個屬性的view的padding去為我們的status_bar留下空間。
如果你不寫,那麼狀態列就會出現顏色重疊。
注意:以上幾種方法佈局必須設定了顏色或者背景,否則狀態列將會顯示預設的灰白色。
如果設定的是透明效果顏色的話,狀態列底層也會顯示一層灰白色,會與設定的背景進行疊加。
以上就是設定狀態列顏色的幾種方法,可以根據需要進行選擇。