安卓專案實戰之沉浸式狀態列的實現
阿新 • • 發佈:2018-12-22
工具類:
public class StatusBarUtil {
/**
* 給activity的狀態列設定顏色
*
* @param activity
* @param color
*/
public static void setStatusBarColor(Activity activity, int color) {
// 5.0 以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.getWindow ().setStatusBarColor(color);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
View view = new View(activity);
ViewGroup.LayoutParams params = new ViewGroup
.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, getStatusBarHeight(activity));
view.setLayoutParams(params);
view.setBackgroundColor(color);
ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
decorView.addView (view);
ViewGroup contentView = (ViewGroup) activity.findViewById(android.R.id.content);
contentView.setPadding(0, getStatusBarHeight(activity), 0, 0);
}
}
/**
* 設定activity全屏,狀態列透明,內容填充到狀態列中
*/
public static void setStatusBarTranslucent(Activity activity) {
// 5.0 以上
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
View decorView = activity.getWindow().getDecorView();
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
}
}
/**
* 獲取狀態列的高度
*/
public static int getStatusBarHeight(Activity activity) {
Resources resources = activity.getResources();
int statusBarHeightId = resources.getIdentifier("status_bar_height", "dimen", "android");
return resources.getDimensionPixelOffset(statusBarHeightId);
}
/**
* 修改狀態來字型顏色
*/
public static void setStatusBarTextColor(Activity activity) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
activity.getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
}
}