Android获取状态栏、标题栏、屏幕高度

版权声明:本文出自wdmzszly的博客,转载必须注明出处。 https://blog.csdn.net/wdmzszly/article/details/82111164


状态栏高度

反射获取

public static int getStatusbarHeight(Context context) {
   try {
       Class<?> c = Class.forName("com.android.internal.R$dimen");
       Object obj = c.newInstance();
       Field field = c.getField("status_bar_height");
       int x = Integer.parseInt(field.get(obj).toString());
       int height = context.getResources().getDimensionPixelSize(x);
       return height;
  } catch(Exception e1) {
       e1.printStackTrace();
  }
   return 0;
}

资源获取

public static int getStatusbarHeight(Context context){
    int result = 0;
    int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = context.getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

这个方法推荐在回调方法onWindowFocusChanged()中执行。

通过DecorView获取

public static int getStatusbarHeight(Activity activity){
   Rect rect = new Rect();
   activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
   return rect.top;
}

Activity初始化时执行此方法得到的高度是0,推荐在onWindowFocusChanged使用。

标题栏高度

public static int getTitleHeight(Activity activity){
   Rect rect = new Rect();
   activity.getWindow().getDecorView().getWindowVisibleDisplayFrame(rect);
   int contentTop = activity.getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();
   return contentTop - rect.top;
}

屏幕宽高度

public static int getScreenHeight(Context context){
    int height = context.getResources().getDisplayMetrics().heightPixels;
    return height;
}

public static int getScreenHeight(Activity activity){
    DisplayMetrics displayMetrics = new DisplayMetrics();
    activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    return displayMetrics.heightPixels;
}

 

猜你喜欢

转载自blog.csdn.net/wdmzszly/article/details/82111164