java - 计算总设备高度和宽度
问题描述
我想计算设备的总宽度和高度。我有一个 600x1024 的设备,下面的代码在横向和 972 高度纵向时仅显示 552 宽度。
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
解决方案
您的尺寸越来越小,因为导航栏占用了一些空间,并且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 是 hack,因此请记住,它们有可能在某些设备上失败。