4.4以上的沉浸模式

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);
       }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值