Рассчитать общую высоту и ширину устройства - PullRequest
0 голосов
/ 07 мая 2018

Я хочу рассчитать общую ширину и высоту устройства. У меня есть устройство 600x1024, и следующий код показывает только 552 ширины при альбомной ориентации и 972 высоты при портретной ориентации.

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

1 Ответ

0 голосов
/ 07 мая 2018

Вы получаете меньший размер, потому что панель навигации занимает некоторое пространство, и 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 являются хакерами, поэтому имейте в виду, что на некоторых устройствах у них есть шанс на сбой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...