if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP){
win.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
win.getDecorView().setSystemUiVisibility(win.getDecorView().getSystemUiVisibility()| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
win.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
win.setStatusBarColor(Color.TRANSPARENT);
}
3,實現沉浸模式,最開始規定好原則,很好實現,網上也有方法;但是如果是在項目已經完成後,因爲內部有些頁面沒有用到固定通欄之類的,有個終極解決辦法;在setContentView之後調用setStatusBarColor方法;頁面樣式fitsSystemWindows=true,不過最好是代碼控制;
4,沉浸式,會影響PopupWindow。特別是有虛擬導航的時候,需要設置popupWindow.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE)
publicstatic void setStatusBarColor(Activity activity,int color, booleanfitSystem) {
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.KITKAT) {
Window win = activity.getWindow();
win.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
if(Build.VERSION.SDK_INT >=Build.VERSION_CODES.LOLLIPOP){
win.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
win.getDecorView().setSystemUiVisibility(win.getDecorView().getSystemUiVisibility()| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN |View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
win.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
win.setStatusBarColor(Color.TRANSPARENT);
}
ViewGroup decorViewGroup = (ViewGroup)win.getDecorView();
ViewGroup rootView= (ViewGroup)decorViewGroup.findViewById(android.R.id.content);
if(rootView != null){
ViewcontentView=rootView.getChildAt(0);
if(contentView != null){
contentView.setFitsSystemWindows(fitSystem);
}
ViewmStatusBarTintView = rootView.getChildAt(1);
if(mStatusBarTintView == null){
mStatusBarTintView = newView(activity);
FrameLayout.LayoutParamsparams = newFrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,Utils.getStatusBarHeight(activity));
params.gravity =Gravity.TOP;
mStatusBarTintView.setLayoutParams(params);
rootView.addView(mStatusBarTintView);
}
mStatusBarTintView.setBackgroundColor(color);
}
}
}