- 0. Related articles:
- 2. Get the height of the status bar
- 2.1. Obtain through system size resources
- 2.2, through the reflection of class R
- 2.3. With the help of the top attribute of the application area
- 2.4 With the help of screen and application area height
- 3. Get the height of the title bar
- 3.1、top-top
- 3.2, height-height
- 4. Get the height of the navigation bar
- Высота строки состояния в Android
- 19 ответов
- текущий метод:
- (старый метод), чтобы получить высоту строки состояния на onCreate() метод вашей деятельности, используйте этот метод:
- Высота строки состояния в Android
- 19 ответов:
- текущий метод:
- (старый метод), чтобы получить высоту строки состояния на onCreate() метод вашей деятельности, используйте этот метод:
0. Related articles:
2. Get the height of the status bar
related articles:Android get status bar height, title bar height, editing area height
The status bar is an area that displays the status of the phone (such as battery power, network status, time, operator information, etc.). Generally, content-based applications will display the reserved status bar, but if the game interface still retains the status bar, it is not suitable because the game The interface should respond to various gestures, and the status bar will also respond to some gestures, which may cause erroneous operations. Therefore, the status bar is generally hidden in the game interface, so that the game interface is displayed in full screen. Please see the settings for full screen»Two Ways for Android to Set Activity Full Screen and Theme Property Analysis», Continue to look at the height measurement of the status bar:
There are 4 methods for measuring the height of the status bar:
2.1. Obtain through system size resources
The height of the status bar is defined in the status_bar_height of the Android system size resources, but this is not publicly available, such as android.R.dimen.status_bar_height, which is usually used by system resources. But the system provides us with a Resource class, through which you can get resource files, and thus you can get status_bar_height
2.2, through the reflection of class R
Everyone knows that all resources of Android will have a unique identifier as a reference in the R class. We can also get the instance field of the R class through reflection, and then find status_bar_height
2.3. With the help of the top attribute of the application area
This uses the screen area at the beginning of the question to divide the picture. The status bar is located at the top of the screen, and its position starts from (0,0), so the top position of the application area (height = Y coordinate-0) is the status bar. height
*note*If you only get the statusBar height but not the titleBar height, this method is not recommended for everyone, because this method relies on WMS (callback of window management service). It is because of the window callback mechanism that the height obtained by executing this method when the Activity is initialized is 0, which is why many people get the statusBar height to 0. This method is recommended to be executed in the callback method onWindowFocusChanged () to get the expected result. A
2.4 With the help of screen and application area height
Or look at the screen area division diagram, does the status bar fill up all the screen except the application area? So go directly to the code
3, 4 These two methods are essentially the same, so if you only get the statusBar height without getting the titleBar height, it is not recommended for everyone, the reason is the same as method 3 above
3. Get the height of the title bar
Understand the principle above, the height measurement of the title bar is at hand, it is still the screen area division map. Two methods are also given here, let’s give the public code first, that is, get each area (* Note * is still executed in Activity’s callback method onWindowFocusChanged () to get the expected result)
Sometimes the outRect2.top = 0 listed when getting the View drawing area
3.1、top-top
3.2, height-height
4. Get the height of the navigation bar
related articles:Android get the height of the status bar at the top of the system and the height of the bottom navigation bar
In Android 4.0 (API Level 14) and higher, System Bar by Status Bar (at the top) with Navigation Bar (at the bottom) composition.
Источник
Высота строки состояния в Android
какова высота строки состояния в Android? Это всегда одно и то же?
из моих измерений кажется, что это 25dp, но я не уверен, что он имеет одинаковую высоту на всех платформах.
(Я хочу знать это, чтобы правильно реализовать переход fade от действия, которое не имеет строки состояния к тому, что делает)
19 ответов
на этот вопрос был дан ответ раньше. высота строки состояния?
обновление::
текущий метод:
ok, высота строки состояния зависит от размера экрана, например, в устройстве с размером экрана 240 X 320 высота строки состояния 20px, для устройства с размером экрана 320 X 480 высота строки состояния 25px, для устройства с 480 x 800 высота строки состояния должна быть 38px
поэтому я рекомендую использовать этот скрипт для получения строки состояния height
(старый метод), чтобы получить высоту строки состояния на onCreate() метод вашей деятельности, используйте этот метод:
из всех образцов кода, которые я использовал для получения высоты строки состояния, единственный, который действительно работает в onCreate метод Activity это:
по-видимому, фактическая высота строки состояния сохраняется как ресурс Android. Приведенный выше код можно добавить в ContextWrapper класса (например, Activity ).
на устройствах MDPI строка состояния 25px. Мы можем использовать это как основание и умножить его на плотность (округлено), чтобы получить высоту строки состояния на любом устройстве:
для справки: ldpi=.75, mdpi=1, hdpi=1.5, xhdpi=2
по данным рекомендации по дизайну Google; высота строки состояния 24 dp.
Если вы хотите получить высоту строки состояния в пикселях, вы можете использовать следующий метод:
который можно вызвать из activity с помощью:
Я объединил некоторые решения вместе:
это также работает с refrence ссылке
Hardcoding размер или использование отражения, чтобы получить значение status_bar_height считается плохой практикой. Крис Бейнс говорили об этом в Droidcon в Нью-Йорке. Рекомендуемый способ получения размера строки состояния — через OnApplyWindowInsetsListener:
Это было добавлено в API 20 и также передается через ViewAppCompat.
у меня такая же проблема с тем, чтобы получить высоту строки состояния в onCreate. Это работает для меня.
Да, когда я пробую его с видом, он предоставляет результат 25px. Вот весь код :
официальная высота 24dp , как официально заявлено Google на веб-страница дизайна Android.
высота по умолчанию используется для 25dp. С Android Marshmallow (API 23) высота была уменьшена до 24dp.
320х480 — 25 пикселей
480×800+ — 38px
он не работал для меня в методе onCreate для активности, но сделал, когда я положил его в onClickListener и дал мне измерение 25
чтобы решить эту проблему, я использовал комбинированный подход. Это необходимо, так как на планшетах системная панель уже вычитает пиксели при отображении.getHeight() называется. Поэтому я сначала проверяю, присутствует ли системная панель, а затем подходит Бен Клейтонс, который отлично работает на телефонах.
высота строки состояния 24dp в android 6.0
вы можете найти ответ в исходном коде: Framework\base\core\res\res\values\dimens.в XML
Переключить Разрешение В Полноэкранном Режиме:
Это решение может выглядеть как обходной путь, но на самом деле он учитывает, является ли ваше приложение полноэкранным (он же скрывает строку состояния) или нет:
таким образом, если ваше приложение в настоящее время полноэкранные, barheight будет равна 0.
лично я должен был использовать это, чтобы исправить абсолютные координаты TouchEvent для учета строки состояния так:
и это получит Абсолют y-координата, будет ли приложение полноэкранным или нет.
на Android 4.1 и выше, вы можете установить содержание вашего приложения, чтобы появиться за строку состояния, так что содержание не изменяет размер, как строка состояния скрывает и показывает. Для этого используйте SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Вам также может потребоваться использовать SYSTEM_UI_FLAG_LAYOUT_STABLE, чтобы помочь вашему приложению поддерживать стабильный макет.
при использовании этого подхода вы несете ответственность за обеспечение того, чтобы критические части пользовательского интерфейса вашего приложения (например, встроенные элементы управления в картах применение) не заканчивайте тем, что покрываетесь системными барами. Это может сделать ваше приложение непригодным. В большинстве случаев вы можете справиться с этим, добавив атрибут android:fitsSystemWindows в файл макета XML, установленный в true. Это регулирует заполнение родительской группы просмотра, чтобы оставить место для системных окон. Этого достаточно для большинства приложений.
в некоторых случаях, однако, вам может потребоваться изменить заполнение по умолчанию, чтобы получить желаемый макет для вашего приложения. Непосредственно манипулировать как ваше содержимое раскладывается относительно системных баров(которые занимают пространство, известное как «вставки содержимого» окна), переопределяет fitsystemwindows (вставки Rect). Метод fitSystemWindows () вызывается иерархией представлений при изменении вставок содержимого для окна, чтобы позволить окну соответствующим образом настроить его содержимое. Переопределяя этот метод, вы можете обрабатывать вставки (и, следовательно, макет вашего приложения), однако вы хотеть.
Если вы точно знаете размер высоты против
например, в устройстве с размером экрана 320 X 480 высота строки состояния составляет 25px, для устройства с 480 x 800 высота строки состояния должна быть 38px
тогда вы можете просто получить ширину вашего вида / размер экрана, вы можете просто использовать оператор if else, чтобы получить высоту строки состояния
почему верхний ответ не работает для некоторых людей, потому что вы не можете получить размеры, пока не готова предоставить. Используйте OnGlobalLayoutListener чтобы получить указанные размеры, когда вы действительно можете:
Источник
Высота строки состояния в Android
какова высота строки состояния в Android? Это всегда одно и то же?
из моих измерений кажется, что это 25dp, но я не уверен, что он имеет одинаковую высоту на всех платформах.
(Я хочу знать это, чтобы правильно реализовать переход fade от действия, которое не имеет строки состояния к тому, что делает)
19 ответов:
обновление::
текущий метод:
ОК, высота строки состояния зависит от размера экрана, например в устройстве с разрешение 240 x 320 размер экрана статус бар высота 20 пикселей, для устройства с размером 320 x 480 экран статус бар высота-25 пикселей, для устройств с разрешением 480 х 800 состояние высота бруска должна быть 38px
поэтому я рекомендую использовать этот скрипт для получения высоты строки состояния
(старый метод), чтобы получить высоту строки состояния на onCreate() метод вашей деятельности, используйте этот метод:
из всех примеров кода, которые я использовал, чтобы получить высоту строки состояния, единственный, который на самом деле работает в onCreate метод an Activity это:
по-видимому, фактическая высота строки состояния сохраняется в качестве ресурса Android. Приведенный выше код может быть добавлен к ContextWrapper класса (например, Activity ).
на mdpi устройств, в строке состояния-25 пикселей. Мы можем использовать это в качестве основы и умножить его на плотность (округленный вверх), чтобы получить высоту строки состояния на любом устройстве:
для справки: ldpi=.75, mdpi=1, hdpi=1,5, xhdpi=2
Если вы хотите получить высоту строки состояния в пикселях, вы можете использовать следующий метод:
, который может быть вызван из деятельности с:
Я объединил некоторые решения вместе:
жесткое кодирование размера или использование отражения для получения значения status_bar_height считается плохой практикой. Крис Бэйнс говорили об этом в Droidcon Нью-Йорк. Рекомендуемый способ получения размера строки состояния — через OnApplyWindowInsetsListener:
Это было добавлено в API 20, а также обратно через ViewAppCompat.
у меня такая же проблема, чтобы получить высоту строки состояния в onCreate. Это работает для меня.
Да, когда я пытаюсь его с видом он обеспечивает результат 25px. Вот весь код :
официальная высота 24dp , как официально заявляет Google на Веб-страница дизайна Android.
высота по умолчанию используется для 25dp. С Android Marshmallow (API 23) высота была уменьшена до 24dp.
320×480-25px
480×800+ — 38px
это не сработало для меня в методе onCreate для активности, но сделал, когда я положил его в onClickListener и дал мне измерение 25
чтобы решить эту проблему, я использовал комбинированный подход. Это необходимо, так как на планшетах системная панель уже вычитает свои пиксели при отображении.getHeight() называется. Поэтому я сначала проверяю, присутствует ли системная панель, а затем подход Ben Claytons, который отлично работает на телефонах.
высота строки состояния составляет 24dp в android 6.0
вы можете найти ответ в исходном коде: Framework\base\core\res\res\values\dimens.xml
Переключить Разрешение В Полноэкранном Режиме:
Это решение может выглядеть как обходной путь, но на самом деле он учитывает, является ли ваше приложение полноэкранным (он же скрывает строку состояния) или нет:
таким образом, если ваше приложение в настоящее время полноэкранные, barheight будет равна 0.
лично мне пришлось использовать это, чтобы исправить абсолютные координаты TouchEvent для учета строки состояния следующим образом:
и это будет получить Абсолют y-координата, будет ли приложение полноэкранным или нет.
на Android 4.1 и выше вы можете настроить содержимое вашего приложения, чтобы оно отображалось за строкой состояния, чтобы содержимое не изменялось по мере скрытия и отображения строки состояния. Чтобы сделать это, используйте SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Вам также может потребоваться использовать SYSTEM_UI_FLAG_LAYOUT_STABLE, чтобы помочь вашему приложению поддерживать стабильный макет.
при использовании этого подхода вы несете ответственность за обеспечение того, чтобы критические части пользовательского интерфейса вашего приложения (например, встроенные элементы управления в Maps применение) не в конечном итоге покрывается системными барами. Это может сделать ваше приложение непригодным для использования. В большинстве случаев вы можете справиться с этим, добавив атрибут android:fitsSystemWindows в свой XML-файл макета, установленный в true. Это позволяет настроить заполнение родительской группы представлений, чтобы оставить место для системных окон. Этого достаточно для большинства приложений.
в некоторых случаях, однако, вам может потребоваться изменить заполнение по умолчанию, чтобы получить желаемый макет для вашего приложения. Чтобы напрямую манипулировать тем, как ваш контент выкладывается относительно системных панелей(которые занимают пространство, известное как «вставки содержимого» окна), переопределяют fitSystemWindows (Rect insets). Метод fitSystemWindows () вызывается иерархией представлений при изменении вставок содержимого для окна, чтобы позволить окну соответствующим образом настроить его содержимое. Переопределив этот метод, вы можете обрабатывать вставки (и, следовательно, макет вашего приложения), однако вы хотеть.
Если вы точно знаете размер высоты против
например, в устройстве с размером экрана 320 X 480 высота строки состояния составляет 25px, для устройства с 480 x 800 высота строки состояния должна быть 38px
тогда вы можете просто получить ширину вашего представления / размер экрана вы можете просто использовать оператор if else, чтобы получить высоту строки состояния
почему верхний ответ не работает для некоторых людей, потому что вы не можете получить размеры, пока не готова предоставить. Используйте OnGlobalLayoutListener сделать измерения, когда вы на самом деле можете:
Источник