android 屏幕高度、状态栏高度、titlebar高度详解

来源:互联网 发布:听歌软件排行 编辑:程序博客网 时间:2024/05/13 19:26

一、屏幕高度、状态栏高度、titlebar高度区分


二、获取整个屏幕的高度


DisplayMetrics dm = new DisplayMetrics();  getWindowManager().getDefaultDisplay().getMetrics(dm);  Log.e("Allence", "屏幕高:" + dm.heightPixels);

三、获取状态栏的高度

1.通过系统尺寸资源获取

      状态栏高度定义在Android系统尺寸资源中status_bar_height,但这并不是公开可直接使用的,例如像通常使用系统资源那样android.R.dimen.status_bar_height。但是系统给我们提供了一个Resource类,通过这个类可以获取资源文件,借此可以获取到status_bar_height:

 /**  * 获取状态栏高度——方法1  * */  int statusBarHeight1 = -1;  //获取status_bar_height资源的ID  int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");  if (resourceId > 0) {      //根据资源ID获取响应的尺寸值      statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);  }  Log.e("Allence", "状态栏-方法1:" + statusBarHeight1);  
2.通过R类的反射

大家都知道Android的所有资源都会有惟一标识在R类中作为引用。我们也可以通过反射获取R类的实例域,然后找status_bar_height:

/**          * 获取状态栏高度——方法2          * */          int statusBarHeight2 = -1;          try {              Class<?> clazz = Class.forName("com.android.internal.R$dimen");              Object object = clazz.newInstance();              int height = Integer.parseInt(clazz.getField("status_bar_height")                      .get(object).toString());              statusBarHeight2 = getResources().getDimensionPixelSize(height);          } catch (Exception e) {              e.printStackTrace();          }          Log.e("Allence", "状态栏-方法2:" + statusBarHeight2); 
三、标题栏(titlebar)高度的测量

1.如果设置了requestWindowFeature(Window.FEATURE_NO_TITLE)标题栏高度为0

2.获取标题栏高度的方法:

      //屏幕          DisplayMetrics dm = new DisplayMetrics();          getWindowManager().getDefaultDisplay().getMetrics(dm);          Log.e("WangJ", "屏幕高:" + dm.heightPixels);            //应用区域          Rect outRect1 = new Rect();          getWindow().getDecorView().getWindowVisibleDisplayFrame(outRect1);                    //View绘制区域          Rect outRect2 = new Rect();          getWindow().findViewById(Window.ID_ANDROID_CONTENT).getDrawingRect(outRect2);           int viewTop = getWindow().findViewById(Window.ID_ANDROID_CONTENT).getTop();   //要用这种方法                        //获取status_bar_height资源的ID        int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");        if (resourceId > 0) {            //根据资源ID获取响应的尺寸值            statusBarHeight1 = getResources().getDimensionPixelSize(resourceId);        }                          titleHeight1 = viewTop - outRect1.top;                                    System.out.println(titleHeight1+"***************titleHeight1");

注意:在oncreat()方法中得到的titlebar的高度为0






阅读全文
0 0
原创粉丝点击