Intereting Posts
Java.lang.NoClassDefFoundError: в dalvik.system.NativeStart.main (собственный метод) Каждые 1 минуту Gps LatLong Получение от сервера, отображаемого на карте как маркер. Но Marker Geting Дублирование Android "hello world" пример pushnotification Как изменить стиль андроида «принудительно закрыть окно»? Как передать правильные данные в шейдерную программу OpenGL-ES 2.0 Ошибка при попытке установить пакет Android app apk для платформы 4.1 Лучший способ загрузить изображение из URL-адреса и сохранить его во внутренней памяти Подключитесь к эмулятору android для веб-службы localhost Предотвратите ошибку Android «process is bad» Значок ошибки EditText и отображение пароля с ошибкой Phonegap: как проверить, включен ли gps Свободная ручная роспись не работает должным образом? Разница между отладкой и выпуском apks Google Cloud Messaging не работает с 4.1.2 устройствами в корпоративной сети Robolectric 2.4 NoSuchMethodError не может быть применен к RuntimeException при создании активности

Как получить размер экрана в Android, включая виртуальные кнопки?

Для нормального использования вы можете использовать класс DisplayMetrics и получить «визуализируемый» размер, но я хочу выяснить фактический размер физического экрана, который включает в себя высоту виртуальных кнопок.

На моей Galaxy Nexus размер отчета, независимо от того, что я пробовал, – это 1196×720, что я могу использовать для получения физической версии 1280×720? То же самое касается устройств Nexus 7, Nexus 4 и Nexus 10.

UPDATE : это последний код, который я использую сейчас, включая исправление:

//Activity A = this; DisplayMetrics displayMetrics = new DisplayMetrics(); WindowManager wm = (WindowManager) A.getApplicationContext().getSystemService(Context.WINDOW_SERVICE); Display disp = wm.getDefaultDisplay(); int API_LEVEL = android.os.Build.VERSION.SDK_INT; if (API_LEVEL >= 17) { disp.getRealMetrics(displayMetrics); } else { disp.getMetrics(displayMetrics); } int Width = displayMetrics.widthPixels; int Height = displayMetrics.heightPixels; 

Вы должны использовать Display.getRealSize (Point) из официальных документов здесь

Область отображения описана двумя разными способами.

Область отображения приложения определяет часть экрана, которая может содержать окно приложения, за исключением системных украшений.

Область отображения приложения может быть меньше реальной области отображения, поскольку система вычитает пространство, необходимое для элементов декора, таких как строка состояния. Используйте следующие методы для запроса области отображения приложения: getSize (Point), getRectSize (Rect) и getMetrics (DisplayMetrics).

Реальная область отображения указывает часть отображения, содержащую контент, включая украшения системы. Тем не менее, реальная область отображения может быть меньше физического размера дисплея, если диспетчер окон эмулирует меньший дисплей, используя (размер дисплея adb shell am display-size). Используйте следующие методы для запроса реальной области отображения: getRealSize (Point), getRealMetrics (DisplayMetrics).

Ответ в подобном вопросе, похоже, имеет решение получить реальный размер дисплея, когда API <17 https://stackoverflow.com/a/15699681/601298

 WindowManager w = activity.getWindowManager(); Display d = w.getDefaultDisplay(); DisplayMetrics metrics = new DisplayMetrics(); d.getMetrics(metrics); // since SDK_INT = 1; widthPixels = metrics.widthPixels; heightPixels = metrics.heightPixels; // includes window decorations (statusbar bar/menu bar) if (Build.VERSION.SDK_INT >= 14 && Build.VERSION.SDK_INT < 17) try { widthPixels = (Integer) Display.class.getMethod("getRawWidth").invoke(d); heightPixels = (Integer) Display.class.getMethod("getRawHeight").invoke(d); } catch (Exception ignored) { } // includes window decorations (statusbar bar/menu bar) if (Build.VERSION.SDK_INT >= 17) try { Point realSize = new Point(); Display.class.getMethod("getRealSize", Point.class).invoke(d, realSize); widthPixels = realSize.x; heightPixels = realSize.y; } catch (Exception ignored) { }