我想计算设备的总宽度和高度。我有一个600x1024的设备,以下代码在横向和972高度肖像时仅显示552宽度。
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
答案 0 :(得分:0)
您的尺寸越来越小,因为导航栏占用了一些空间,而getWindowManager().getDefaultDisplay().getMetrics(displayMetrics)
只会返回可用的屏幕尺寸。
没有官方记录的方法来获得全屏尺寸,但有一些解决方法:
您可以获取导航栏的大小并将其添加到代码中的屏幕大小:
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
if (resourceId > 0) {
return resources.getDimensionPixelSize(resourceId);
}
return 0;
您可以获得整个屏幕尺寸:
public static Point getRealScreenSize(Context context) {
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
Display display = windowManager.getDefaultDisplay();
Point size = new Point();
if (Build.VERSION.SDK_INT >= 17) {
display.getRealSize(size);
} else if (Build.VERSION.SDK_INT >= 14) {
try {
size.x = (Integer) Display.class.getMethod("getRawWidth").invoke(display);
size.y = (Integer) Display.class.getMethod("getRawHeight").invoke(display);
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
} catch (NoSuchMethodException e) {}
}
return size;
}
方法2和3是黑客攻击,所以请记住,他们有可能在某些设备上失败。