Как получить размер экрана в 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) { }