#java #android #screen
#java #Android #экран
Вопрос:
Я использую следующий код, чтобы получить размер экрана устройства. Это работает на всех моих устройствах, кроме Galaxy S10. Galaxy S10 имеет 3040 вертикальных пикселей, и эта функция возвращает что-то около 2800?
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
Комментарии:
1. Я думаю, мне нужно объяснить мою проблему более подробно. Я использую метод .getSize, чтобы получить «полезный» размер экрана для моего приложения. На основе этой информации я вычисляю конкретные точки касания. Это работает нормально, за исключением Galaxy S10. Экран моего приложения начинается под буквой «O» на дисплее Infinity O. Кажется, что .getSize вычисляет вертикальный размер экрана с этой точки. Однако на самом деле дисплей начинается над буквой «O», и поэтому мои вычисления для правильных точек касания находятся в неправильном положении. По крайней мере, это то, что я думаю.
2. ОК. Я решил проблему. Это была моя ошибка. Я допустил ошибку в AndroidManifest.xml что вызвало эту проблему.
Ответ №1:
Размер, возвращаемый getSize()
, не обязательно возвращает фактический размер. Причины этого, которые я привел ниже из here, можно найти в документации.
Возвращаемый размер может быть скорректирован, чтобы исключить определенные элементы оформления системы, которые всегда видны.
Его можно масштабировать, чтобы обеспечить совместимость со старыми приложениями, которые изначально были разработаны для дисплеев меньшего размера.
Он может отличаться в зависимости от WindowManager, которому принадлежит дисплей.
Ответ №2:
Вы можете попробовать использовать это:
public static int getDisplayHeight(Context context) {
WindowManager windowManager =(WindowManager)context.getSystemService(Context.WINDOW_SERVICE);
DisplayMetrics displayMetrics = new DisplayMetrics();
windowManager.getDefaultDisplay().getRealMetrics(displayMetrics);
return displayMetrics.heightPixels - getNavigationBarHeight(context);
}
public static int getNavigationBarHeight(Context context) {
if (context != null amp;amp; context.getResources() != null) {
Resources resources = context.getResources();
int resourceId = resources.getIdentifier("navigation_bar_height", "dimen", "android");
return resourceId > 0 ? resources.getDimensionPixelSize(resourceId) : 0;
}
return 0;
}