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(метрики).