2013-04-22 5 views
5

У меня размер экрана 600 (ширина) x 1024 (высота). Я получаю текущую ширину 600, но неправильно получаю высоту 976 (без поворота экрана). Я получаю текущую ширину 1024, но неправильно получаю высоту 552 (с повернутым экраном).Неверная ширина и высота отображения в Android

int rowPixelWidth = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getWidth(); 
       int rowWidth = (int)Math.floor(rowPixelWidth/this.getResources().getDisplayMetrics().density); 
       int rowPixelheight = ((WindowManager) getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getHeight(); 
       int rowheight = (int)Math.floor(rowPixelheight/this.getResources().getDisplayMetrics().density); 
       Log.d("rowWidth","rowWidth"+rowWidth); 
       Log.d("rowheight","rowheight"+rowheight); 
------------------------------------------------------------- 
<uses-sdk 
     android:minSdkVersion="3" 
     android:targetSdkVersion="8" /> 
    <supports-screens android:anyDensity="true"/> 
------------------------------------------------------------- 

Что не так с этим кодом?

Вот некоторые цифры для типичных ширины экрана:

  1. 320dp: типичный экран телефона (240х320 ldpi, 320х480 MDPI, 480х800 ИПЧР, и т.д.).
  2. 480dp: таблетка для tweener, как полоса (480x800 mdpi).
  3. 600dp: 7-дюймовый планшет (600x1024 mdpi).
  4. 720dp: 10-дюймовый планшет (720x1280 mdpi, 800x1280 mdpi и т. Д.).

я получаю текущую ширину, но не получить текущую высоту для всех устройств (без (320x480 экрана).

Стараюсь код из Get screen dimensions in pixels но же возникают проблемы.

+3

Ваш код верен. Некоторые устройства вычитают площадь экрана для бывших аппаратных клавиш, которые теперь являются сенсорными кнопками на дисплее, от доступного разрешения экрана. –

+0

Я получаю текущую ширину и высоту только 320 (ширина) экрана x480 (высота), но не получаю текущую ширину и высоту другого экрана. – AnilPatel

+0

И почему это проблема? –

ответ

9

Я считаю, что getDefaultDisplay только дает вам в окне, где приложение будет отображаться, оно не учитывает другие вещи, такие как панель уведомлений сверху или кнопки андроида (дома, назад ...) внизу или что-то в этом роде.

Возможно, именно поэтому вы см. разницу в 48 пикселей в ve в обоих случаях.

ПОДРОБНЕЕ

Ваш код, кажется, правильно и похоже на то, что there. Вы также можете использовать что-то вроде this answer, чтобы использовать правильный API для правильной версии Android.

Но в любом случае размер, который вы получите, не будет включать навигационную панель с мягкими кнопками Android, если они присутствуют.

Когда вы запускаете Android 4.1 на экране HVGA, нет панели навигации или комбинированной панели (экран слишком мал для этого), поэтому вы получаете разрешение для всего экрана.

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

Пожалуйста, проверьте определения панели навигации и другие here, если вы не поняли.

+0

48 пикселей различаются по экрану 600x1024, но не 48 пикселей в 480x800 screen.please, помогите мне. – AnilPatel

+1

Что вы дадите в случае 480x800? Какие версии Android работают на этих устройствах? – Matthieu

+0

Извините Matthieu, я ошибаюсь размером 480X800, но мой размер 320X480 (HVGA-экран) не имеет разных 48 пикселей, но я получаю текущую ширину (320) и высоту (480). пожалуйста помогите. – AnilPatel

0

Высота экрана с кодом выше не включает в себя кнопки андроида (дома, сзади, последние приложения) внизу с шириной 48 пикселей. В результате вы получаете высоту экрана 1024-48 = 976.

Вышеуказанная функция дает область, в которой приложение можно увидеть. Это приложение можно использовать как полноэкранное приложение, которое скроет панель уведомлений сверху, но по-прежнему не будет скрывать панель кнопок Android (дома, назад, последние приложения) внизу. Таким образом, максимальное пространство экрана, которое вы можете использовать, составляет 1024-48 = 976 пикселей.

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

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