一、屏幕高度、状态栏高度、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