Android getDisplayMetrics() не возвращает точный размер экрана

Я пытаюсь получить ширину / высоту устройства в пикселях для размещения элементов и отображения событий касания на экране, но не получаю желаемого эффекта (обратите внимание, что нижний правый квадрат должен полностью совпадать с нижним правым):

Белый квадрат должен быть заподлицо в правом нижнем углу

// screen size
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    float ScrDensity = metrics.density;
    int metricHeight = metrics.heightPixels;//
    int metricWidth = metrics.widthPixels;//

    Log.i("AllMetrics", metrics.toString());

    // temp
    int rightButton_diameter = 100;
    int rightButton_xpos = metricWidth - rightButton_diameter;
    int rightButton_ypos = metricHeight - rightButton_diameter;

Где AllMetrics возвращает:

DisplayMetrics{density=2.0, width=720, height=1184, scaledDensity=2.0, xdpi=320.0, ydpi=320.0}

Я заметил, что возвращаемая высота также отличается от 720x1280, перечисленных в Диспетчере виртуальных устройств (API 19, Android 4.4), и положения касания по осям x/y кажутся точными для нарисованных элементов (т. Е. Область нажатия кнопки - так же, как и где она рисуется)

Это ошибка конфигурации или я использую неправильный метод получения положения экрана?

2 ответа

Проверьте этот код, он работает для меня

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

Вне деятельности вы можете попробовать это

 ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm)

Чтобы получить доступ к членам DisplayMetrics, инициализируйте объект следующим образом:

Показатели DisplayMetrics = new DisplayMetrics();. GetWindowManager() getDefaultDisplay() getMetrics(метрики).

Другие вопросы по тегам