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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章