计算设备总高度和宽度

时间:2018-05-07 07:14:21

标签: java android android-layout android-studio

我想计算设备的总宽度和高度。我有一个600x1024的设备,以下代码在横向和972高度肖像时仅显示552宽度。

DisplayMetrics displayMetrics = new DisplayMetrics();  
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);  
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;

1 个答案:

答案 0 :(得分:0)

您的尺寸越来越小,因为导航栏占用了一些空间,而getWindowManager().getDefaultDisplay().getMetrics(displayMetrics)只会返回可用的屏幕尺寸

没有官方记录的方法来获得全屏尺寸,但有一些解决方法:

  1. 您的活动进入全屏模式后,您可以获得屏幕尺寸。这应该隐藏导航栏。
  2. 您可以获取导航栏的大小并将其添加到代码中的屏幕大小:

    Resources resources = context.getResources();
    int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
    if (resourceId > 0) {
        return resources.getDimensionPixelSize(resourceId);
    }
    return 0;
    
  3. 您可以获得整个屏幕尺寸:

    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;
    }
    
  4. 方法2和3是黑客攻击,所以请记住,他们有可能在某些设备上失败。