Android: как определить размер видимого экрана?

#android

#Android

Вопрос:

Я собирался использовать Display.getWidth() x Display.getHeight() , но документация для getHeight() отмечает:

Returns the raw height of the display, in pixels. Note that this should not generally be used for computing layouts, since a device will typically have screen decoration (such as a status bar) along the edges of the display that reduce the amount of application space available from the raw size returned here. This value is adjusted for you based on the current rotation of the display .

Итак, что можно надежно сделать Display.getWidth() x Display.getHeight() - statusHeight ? Или есть более формальный способ найти видимый прямоугольник?

Ответ №1:

Используйте View#getWidth() и View#getHeight() в соответствующем View экземпляре после завершения компоновки. Если вы используете SurfaceView , вы также можете использовать значения, предоставленные вам при surfaceChanged обратном вызове.

Ответ №2:

Все зависит от того, что вы пытаетесь сделать. Если вы создаете SurfaceView, который заполняет экран, вам следует реализовать SurfaceHolder.Callback и узнать размер при surfaceChanged() вызове. Если вы создаете свой собственный вид, то вы определяете свой размер с помощью onMeasure() метода.

Комментарии:

1. Допустим, я хотел создать растровое изображение точно такого же размера на экране. И понадобились бы размеры экрана…

2. Необязательно иметь контроль над всем экраном. (например, планшеты Android 3.0 не позволяют приложениям скрывать системную панель и занимать это пространство экрана.) В результате, скорее всего, вам нужен размер вашего представления, а не размер экрана.

3. Размер экрана — это то, что вы получаете в Display классе, но вы сказали, что он вам не подходит. Проблема в том, что даже не обязательно должна быть видимая строка состояния. Итак, что вам на самом деле нужно, так это размер некоторого вида. Вы должны найти этот вид и узнать его размеры.