***(很是有用)沉浸式策略——取消狀態欄/導航欄顯示android
***(很是有用)Android 沉浸式狀態欄完美解決方案ide
針對系統5.0以上佈局
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int color= Resources.getSystem().getColor(android.R.color.holo_green_light); StatusBarUtil.setStatusBarColor(this,color); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); StatusBarUtil.cancelStatusBarHeight(this); }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); StatusBarUtil.cancelStatusBarHeight(this); StatusBarUtil.setRootViewFitsSystemWindows(this,true); int color= ContextCompat.getColor(this,android.R.color.holo_green_light); StatusBarUtil.setStatusBarColor(this, color); }
/** * 設置狀態欄透明,取消狀態欄高度,讓佈局佔據狀態欄空間 */ @TargetApi(19) public static void cancelStatusBarHeight(Activity activity) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { //5.x開始須要把顏色設置透明,不然導航欄會呈現系統默認的淺灰色 Window window = activity.getWindow(); View decorView = window.getDecorView(); //兩個 flag 要結合使用,表示讓應用的主體內容佔用系統狀態欄的空間 int option = View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE; decorView.setSystemUiVisibility(option); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(Color.TRANSPARENT); //導航欄顏色也能夠正常設置 //window.setNavigationBarColor(Color.TRANSPARENT); } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { Window window = activity.getWindow(); WindowManager.LayoutParams attributes = window.getAttributes(); int flagTranslucentStatus = WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS; attributes.flags |= flagTranslucentStatus; //int flagTranslucentNavigation = WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION; //attributes.flags |= flagTranslucentNavigation; window.setAttributes(attributes); } } /** * 代碼實現android:fitsSystemWindows * * @param activity */ public static void setRootViewFitsSystemWindows(Activity activity, boolean fitSystemWindows) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { ViewGroup winContent = (ViewGroup) activity.findViewById(android.R.id.content); if (winContent.getChildCount() > 0) { ViewGroup rootView = (ViewGroup) winContent.getChildAt(0); if (rootView != null) { rootView.setFitsSystemWindows(fitSystemWindows); } } } } /** * 修改狀態欄顏色 * * @param colorId 顏色 */ public static void setStatusBarColor(Activity activity, int colorId) { int color= ContextCompat.getColor(activity,colorId); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = activity.getWindow(); if (window!=null){ window.setStatusBarColor(color); } } }