2016-03-03 3 views
8

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

 DisplayMetrics metrics = new DisplayMetrics(); 
     getWindowManager().getDefaultDisplay().getMetrics(metrics); 

     int Height = metrics.heightPixels; 
     TextView HeightView = (TextView) findViewById(R.id.screenHeight); 
     HeightView.setText("Screen Height: " + Height); 

     int Width = metrics.widthPixels; 
     TextView WidthView = (TextView) findViewById(R.id.screenWidth); 
     WidthView.setText("Screen Width: " + Width); 

Устройство, которое я бегу с помощью эмулятора имеет ширину экрана 1080 пикселей и высоту экрана 1920 пикселей. Ширина отображается правильно (1080 пикселей), но высота соответствует только 1776 пикселям. Что мне нужно, чтобы мое приложение отображало правильную высоту экрана? Является ли metrics.heightPixels плохим способом получения высоты экрана?

ответ

20

см this ответ

, если ваш уровень API> 13 попробовать это, если вы находитесь в деятельности

Display display = getWindowManager().getDefaultDisplay(); 
Point size = new Point(); 
display.getSize(size); 
int width = size.x; 
int height = size.y; 

Если вы не в деятельности вы можете получить дисплей по умолчанию с помощью WINDOW_SERVICE:

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); 
Display display = wm.getDefaultDisplay(); 

GetWidth и GetHeight для уровня API 13 или менее

ОБНОВЛЕНИЕ

для API 17 и выше метода Display.getRealSize() возвращает полный размер экрана, как уже упоминалось in documentation:

Получает реальный размер дисплея без вычитания любого окна декора или применения любого масштаба совместимости факторы.

Размер регулируется на основе текущего поворота дисплея.

Реальный размер может быть меньше физического размера экрана, когда оконный менеджер эмулирует меньший дисплей (с использованием оболочки adb am ).

+1

Без ваших предложений работает по мере необходимости. – lxknvlk

4
int width=Resources.getSystem().getDisplayMetrics().widthPixels; 
int height=Resources.getSystem().getDisplayMetrics().heightPixels; 
3

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

Создайте прямоугольник, и получить его размеры:

Rect r = new Rect(); 
activityRootView.getWindowVisibleDisplayFrame(r); 
int screenHeight = r.bottom - r.top; 

activityRootView, где это вид корень вашего макета.

Если вам нужно извлечь высоту панели инструментов:

int availableScreenHeight = screenHeight - toolbar.getHeight(); 

где toolbar находится ваш взгляд на панели инструментов.

availableScreenHeight теперь будет без панели состояния, без панели инструментов и без панели навигации (если устройство использует ее).

Смежные вопросы