首页 > 解决方案 > 计算总设备高度和宽度

问题描述

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

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

标签: javaandroidandroid-layoutandroid-studio

解决方案


您的尺寸越来越小,因为导航栏占用了一些空间,并且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;
    }
    

方法 2 和 3 是 hack,因此请记住,它们有可能在某些设备上失败。


推荐阅读