2013-03-21 3 views
1

Я пытаюсь получить доступную область экрана моего приложения программно. Для этого я использую getWindowManager().getDefaultDisplay().getSize(). Однако я не совсем уверен, что такое область экрана, соответствующая этому «Окно отображения по умолчанию».Что такое область экрана, возвращаемая getWindowManager(). GetDefaultDisplay()?

Кажется, что включает весь экран (включая панель уведомлений), за исключением панели навигации. Это верно ? Есть ли исключения?

ответ

0

Да, оно включает в себя все пространство, пригодное для использования вашим приложением (то есть, не считая компонентов уровня ОС, таких как панель состояния и уведомлений).

Однако размер изменяется в зависимости от того, используете ли вы такие методы, как setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);, который скрывает строку уведомлений и статуса и дает вашему приложению временное место.

+0

Фактически, если я сравниваю значение, данное этим методом, с моим пространством экрана, он подсчитывает панель уведомлений, что немного странно. – Teovald

2

Из документации:

Получает размер дисплея в пикселях.

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

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

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

Emphasis mine. Так что да, возможно, они могут исключить навигационную панель, но не обязательно.

+0

Интересный ответ. Однако, если я что-то не хватает, я не могу получить пространство, используемое моей деятельностью из класса Window. Интересно, есть ли ошибка документации здесь. – Teovald

+0

Я не знаю, как это сделать, но нет. Я полагаю, что это то, о чем вы должны стараться не беспокоиться, поскольку оно может меняться (скажем, если вы перейдете в полноэкранный режим или временно сокрываете навигационную панель). Что именно ваш прецедент, чтобы знать размеры? Вы всегда можете переопределить метод 'onSizeChanged()' вашего вида и обрабатывать его там. Если ваше представление (или ViewGroup) является корневым макетом и является MATCH_PARENT для обоих измерений, то ширина и высота, которые вы получите, будут доступным пространством активности. – kcoppock

+0

Мой пример использования - приложение для рисования. Мне нужно предоставить размер холста по умолчанию, оставляя возможность выбирать собственные размеры. Таким образом, я получаю общее пространство, удаляю высоту уведомления и высоты панели действий, а также некоторый запас, и я получаю вертикальное пространство рисования. То же самое по горизонтали с некоторым запасом и пространством для инструмента. До сих пор getWindowManager(). GetDefaultDisplay(). GetSize(), но его документация заставляет меня опасаться, что это может вызвать проблемы позже. – Teovald

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