获取屏幕的宽高,通常方法如下几种:
// 获取屏幕密度(一)
Display display = getActivity().getWindowManager().getDefaultDisplay();
int screenHeight = display.getHeight(); // 屏幕高
// 获取屏幕密度(二)
DisplayMetrics dm = getResources().getDisplayMetrics();
int screenWidth = dm.widthPixels; // 屏幕宽
int screenHeight = dm.heightPixels; // 屏幕高
// 获取屏幕密度(三)
DisplayMetrics dm = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm);
int screenWidth = dm.widthPixels; // 屏幕宽
int screenHeight = dm.heightPixels; // 屏幕高
这种方法获取的屏幕高度包括状态栏高度。
但是这几个方法有点问题,正常的手机没毛病,但是android4.0之后有了虚拟按键,有虚拟按键的系统调用上面的方法尺寸会减去虚拟按键的尺寸,回比。
解决方法如下:(得到的数值就是一般所说的)
①API 17 之后提供了方法
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getRealMetrics(dm);
int width = dm.widthPixels; // 屏幕宽
int height = dm.heightPixels; // 屏幕高
②在API 17之前通过反射获取
Display display = getWindowManager().getDefaultDisplay();
DisplayMetrics dm = new DisplayMetrics();
@SuppressWarnings("rawtypes")
Class c;
try {
c = Class.forName("android.view.Display");
@SuppressWarnings("unchecked")
Method method = c.getMethod("getRealMetrics",DisplayMetrics.class);
method.invoke(display, dm);
}catch(Exception e){
e.printStackTrace();
}
int width = dm.widthPixels;
int height = dm.heightPixels;