4.4之后做沉浸模式(就是改变状态栏颜色),这里面坑很多。
参考:
http://www.jianshu.com/p/7f5a9969be53
1,6.0以下是不能改变状态栏图标字体颜色的;如果你的应用通栏是白色,针对非魅族小米和6.0以下手机,状态栏颜色最好设置成半透明黑色。
2,5.0以上要使状态栏全透明需要:
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);
}
}
}