예제 #1
1
  /**
   * 为 DrawerLayout 布局设置状态栏透明
   *
   * @param activity 需要设置的activity
   * @param drawerLayout DrawerLayout
   */
  public static void setTransparentForDrawerLayout(Activity activity, DrawerLayout drawerLayout) {
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
      return;
    }
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
      activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
      activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
      activity.getWindow().setStatusBarColor(Color.TRANSPARENT);
    } else {
      activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }

    ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
    // 内容布局不是 LinearLayout 时,设置padding top
    if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
      contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);
    }

    // 设置属性
    ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);
    drawerLayout.setFitsSystemWindows(false);
    contentLayout.setFitsSystemWindows(false);
    contentLayout.setClipToPadding(true);
    drawer.setFitsSystemWindows(false);
  }
예제 #2
0
 /**
  * 为 DrawerLayout 布局设置状态栏透明(5.0以上半透明效果,不建议使用)
  *
  * @param activity 需要设置的activity
  * @param drawerLayout DrawerLayout
  */
 public static void setTranslucentForDrawerLayoutDiff(
     Activity activity, DrawerLayout drawerLayout) {
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
     // 设置状态栏透明
     activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
     // 设置内容布局属性
     ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
     contentLayout.setFitsSystemWindows(true);
     contentLayout.setClipToPadding(true);
     // 设置抽屉布局属性
     ViewGroup vg = (ViewGroup) drawerLayout.getChildAt(1);
     vg.setFitsSystemWindows(false);
     // 设置 DrawerLayout 属性
     drawerLayout.setFitsSystemWindows(false);
   }
 }
예제 #3
0
 public void setDrawerLayout(ViewGroup layout) {
   drawerLayout = layout;
   addView(drawerLayout);
   if (Build.VERSION.SDK_INT >= 21) {
     drawerLayout.setFitsSystemWindows(true);
   }
 }
예제 #4
0
 /**
  * 为DrawerLayout 布局设置状态栏变色(5.0以下无半透明效果,不建议使用)
  *
  * @param activity 需要设置的activity
  * @param drawerLayout DrawerLayout
  * @param color 状态栏颜色值
  */
 public static void setColorForDrawerLayoutDiff(
     Activity activity, DrawerLayout drawerLayout, int color) {
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
     activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
     // 生成一个状态栏大小的矩形
     View statusBarView = createStatusBarView(activity, color);
     // 添加 statusBarView 到布局中
     ViewGroup contentLayout = (ViewGroup) drawerLayout.getChildAt(0);
     contentLayout.addView(statusBarView, 0);
     // 内容布局不是 LinearLayout 时,设置padding top
     if (!(contentLayout instanceof LinearLayout) && contentLayout.getChildAt(1) != null) {
       contentLayout.getChildAt(1).setPadding(0, getStatusBarHeight(activity), 0, 0);
     }
     // 设置属性
     ViewGroup drawer = (ViewGroup) drawerLayout.getChildAt(1);
     drawerLayout.setFitsSystemWindows(false);
     contentLayout.setFitsSystemWindows(false);
     contentLayout.setClipToPadding(true);
     drawer.setFitsSystemWindows(false);
   }
 }
예제 #5
0
 private View setColor(Activity activity, int color) {
   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
     // 设置状态栏透明
     activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
     // 生成一个状态栏大小的矩形
     // 添加 statusView 到布局中
     View statusView = createStatusBarView(activity, color);
     ViewGroup decorView = (ViewGroup) activity.getWindow().getDecorView();
     if (decorView.getChildAt(decorView.getChildCount() - 1).getId() != Integer.valueOf(1)) {
       decorView.addView(statusView, decorView.getChildCount());
     }
     // 设置根布局的参数
     ViewGroup rootView =
         (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
     rootView.setFitsSystemWindows(true);
     rootView.setClipToPadding(true);
     return statusView;
   }
   return null;
 }
예제 #6
0
 /** 设置根布局参数 */
 private static void setRootView(Activity activity) {
   ViewGroup rootView =
       (ViewGroup) ((ViewGroup) activity.findViewById(android.R.id.content)).getChildAt(0);
   rootView.setFitsSystemWindows(true);
   rootView.setClipToPadding(true);
 }