在网上找的获取屏幕宽度高度的方法多有不准确的,这里以自己手机作为测试,总结一些准确的方法,故有此文。
下文的高指手机从上到下的长度,宽指从左到右的长度。
1.Android 获取屏幕高和宽(不包含虚拟按键)
一般需要知道的,就是这种不包含虚拟按键的高度,因为任何控件布局 都不可能悬浮在显示出来的虚拟按键之上。这种方法获得的高和宽,在有无虚拟按键时是不一样的,它所得的值是不包含虚拟按键部分的高和宽。
WindowManager manager = this.getWindowManager();
DisplayMetrics outMetrics = new DisplayMetrics();
manager.getDefaultDisplay().getMetrics(outMetrics);
int width = outMetrics.widthPixels;
int height = outMetrics.heightPixels;
2.Android 获取屏幕高和宽(包含虚拟按键,即手机屏幕真实的高和宽)
如下获取的值,在有无虚拟按键时都是一致的。因为虚拟按键在Android 4.4开始才会有,所以下面有一个判断
WindowManager windowManager =
(WindowManager) getApplication().getSystemService(Context.
WINDOW_SERVICE);
final Display display = windowManager.getDefaultDisplay();
Point outPoint = new Point();
if (Build.VERSION.SDK_INT >= 19) {
// 可能有虚拟按键的情况
display.getRealSize(outPoint);
} else {
// 不可能有虚拟按键
display.getSize(outPoint);
}
int mRealSizeWidth;//手机屏幕真实宽度
int mRealSizeHeight;//手机屏幕真实高度
mRealSizeHeight = outPoint.y;
mRealSizeWidth = outPoint.x;
3.获取状态栏高度
可以在任意地方调用获取状态栏高度,是目前我知道的唯一一种可以在onCreate()方法中调用,并直接获得准确状态栏高度的方法。注意,当隐藏状态栏时,这个方法同样会返回状态栏显示出来时的值,不会显示0。
public static int getStatusBarHeight() {
int result = 0;
int resourceId = getResources().getIdentifier("status_bar_height",
"dimen", "android");
if (resourceId > 0) {
result = getResources().getDimensionPixelSize(resourceId);
}
return result;
}