Какова высота строки состояния в Android? Это всегда то же самое?
Из моих измерений кажется, что это 25dp, но я не уверен, что он имеет одинаковую высоту на всех платформах.
(Я хочу знать это, чтобы правильно реализовать переход с постепенным исчезновением из действия, у которого нет строки состояния, к тому, которое имеет)
Ответы:
на этот вопрос ответили раньше ... Высота строки состояния?
Обновление ::
Текущий метод:
Хорошо, высота строки состояния зависит от размера экрана, например, в устройстве с размером экрана 240 x 320 высота строки состояния составляет 20 пикселей, для устройства с размером экрана 320 x 480 высота строки состояния составляет 25 пикселей, для Для устройства с разрешением 480 x 800 высота строки состояния должна составлять 38 пикселей
поэтому я рекомендую использовать этот скрипт, чтобы получить высоту строки состояния
(старый метод), чтобы получить высоту строки состояния для
onCreate()
метода вашей деятельности, используйте этот метод:источник
window.getDecorView().getWindowVisibleDisplayFrame(rectangle)
неверный способ получить высоту строки состояния, если вы находитесь в многооконном режиме + портретное вращение + второе окно. Вы получите огромное значение (включая 1-ую высоту).Из всех примеров кода, которые я использовал для получения высоты строки состояния, единственное, что действительно работает в
onCreate
методе aActivity
, это:Видимо, фактическая высота строки состояния сохраняется как ресурс Android. Приведенный выше код может быть добавлен в
ContextWrapper
класс (например, anActivity
).Найдено по адресу http://mrtn.me/blog/2012/03/17/get-the-height-of-the-status-bar-in-android/
источник
На устройствах MDPI строка состояния составляет 25 пикселей. Мы можем использовать это в качестве основы и умножить на плотность (округлить в большую сторону), чтобы получить высоту строки состояния на любом устройстве:
Для справки: ldpi = 0,75, mdpi = 1, hdpi = 1,5, xhdpi = 2
источник
Жесткое кодирование размера или использование отражения для получения значения
status_bar_height
считается плохой практикой. Крис Бейнс говорил об этом в Droidcon New York . Рекомендуемый способ получения размера строки состояния - через OnApplyWindowInsetsListener :Это было добавлено в API 20 и также портировано через ViewAppCompat .
источник
Я объединил несколько решений:
другая альтернатива:
РЕДАКТИРОВАТЬ: альтернатива runJustBeforeBeingDrawn: https://stackoverflow.com/a/28136027/878126
источник
Согласно руководству по дизайну Google ; высота строки состояния 24 дп.
Если вы хотите получить высоту строки состояния в пикселях, вы можете использовать метод ниже:
который можно вызвать из активности с:
источник
Высота по умолчанию была 25dp. С Android Marshmallow (API 23) высота была уменьшена до 24dp.
Обновление: имейте в виду, что с тех пор, как начался возраст надрезов и камер с перфорацией, использование статической высоты для строки состояния больше не работает. Пожалуйста, используйте вместо окна вставки!
источник
это также работает со ссылкой
источник
У меня та же проблема с необходимостью получить высоту строки состояния в onCreate. Это работает для меня.
Внутри onCreate:
Видеть:
http://developer.android.com/reference/android/util/DisplayMetrics.html http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
источник
Официальный рост
24dp
, как официально заявлено Google на веб-странице Android Design .источник
Да, когда я пытаюсь сделать это с помощью View, результат будет 25px. Вот весь код:
источник
источник
Попробуй это:
он не работал для меня в методе onCreate для действия, но работал, когда я помещал его в onClickListener и дал мне измерение 25
источник
высота строки состояния в Android 6.0 24dp
Вы можете найти ответ в исходном коде: frameworks \ base \ core \ res \ res \ values \ dimensions.xml
источник
@android:dimen/status_bar_height
у меня не работаетЧтобы решить эту проблему, я использовал комбинированный подход. Это необходимо, поскольку на планшетах системная панель уже вычитает свои пиксели при вызове display.getHeight (). Поэтому я сначала проверяю наличие системной панели, а затем подход Бена Клейтона, который отлично работает на телефонах.
источник
Благодаря @Niklas +1 это правильный способ сделать это.
Извините, если код не на 100% правильный, конвертируйте его из Xamarin C #, но это как раз то, что нужно. Работает с надрезами и т. Д.
источник
Toggled Fullscreen Solution:
Это решение может выглядеть как обходной путь, но на самом деле оно учитывает, является ли ваше приложение полноэкранным (то есть скрывающим строку состояния) или нет:
Таким образом, если ваше приложение в настоящее время полноэкранное,
barheight
будет равно 0.Лично мне пришлось использовать это, чтобы исправить абсолютные координаты TouchEvent, чтобы учесть статусную строку следующим образом:
И это получит абсолютную координату Y независимо от того, будет ли приложение полноэкранным или нет.
наслаждаться
источник
В Android 4.1 и более поздних версиях вы можете настроить отображение содержимого приложения за строкой состояния, чтобы содержимое не изменялось, поскольку строка состояния скрывается и отображается. Для этого используйте SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN. Вам также может понадобиться использовать SYSTEM_UI_FLAG_LAYOUT_STABLE, чтобы помочь вашему приложению поддерживать стабильный макет.
Когда вы используете этот подход, вы несете ответственность за то, чтобы критические части пользовательского интерфейса вашего приложения (например, встроенные элементы управления в приложении Maps) не покрывались системными панелями. Это может сделать ваше приложение непригодным для использования. В большинстве случаев вы можете справиться с этим, добавив атрибут android: fitsSystemWindows в файл макета XML, установив значение true. Это регулирует заполнение родительской ViewGroup, чтобы оставить место для системных окон. Этого достаточно для большинства приложений.
Однако в некоторых случаях вам может потребоваться изменить отступы по умолчанию, чтобы получить желаемый макет для вашего приложения. Чтобы напрямую манипулировать расположением вашего контента относительно системных панелей (которые занимают пространство, известное как «вставки содержимого» окна), переопределите fitSystemWindows (вставки Rect). Метод fitSystemWindows () вызывается иерархией представления, когда вставки содержимого для окна изменились, чтобы позволить окну соответствующим образом корректировать свое содержимое. Переопределив этот метод, вы можете обрабатывать вставки (и, следовательно, макет вашего приложения), как хотите.
Форма: https://developer.android.com/training/system-ui/status.html#behind
источник
Если вы точно знаете размер VS высота
лайк
например, в устройстве с размером экрана 320 x 480 высота строки состояния составляет 25 пикселей, для устройства с разрешением 480 x 800 высота строки состояния должна составлять 38 пикселей.
тогда вы можете просто получить ширину вашего вида / размер экрана, вы можете просто использовать оператор if else, чтобы получить высоту строки состояния
источник
Причина, по которой верхний ответ не работает для некоторых людей, заключается в том, что вы не можете получить размеры представления, пока оно не будет готово к визуализации. Используйте,
OnGlobalLayoutListener
чтобы получить указанные размеры, когда вы действительно можете:Это самый надежный метод.
источник
Поскольку многооконный режим теперь доступен, ваше приложение может не иметь строки состояния вверху.
Следующее решение обрабатывает все случаи автоматически для вас.
или программно
Вы также можете получить root-представление по
Для получения дополнительной информации о получении root-представления см. Https://stackoverflow.com/a/4488149/9640177.
источник
Этот вопрос недавно стал актуальным для меня из-за выемки в моем Pixel 3XL. Мне очень понравилось решение для разработчиков Android , но я хотел иметь возможность получить высоту строки состояния по своему желанию, так как это было особенно необходимо для полноэкранной анимации, которую мне нужно было воспроизвести. Функция ниже включила надежный запрос:
А затем в классе деятельности:
Вы, конечно, захотите передать слабую ссылку на действие на статический параметр метода класса Helper, но для краткости я воздержался в этом примере. Символы
blurBitmap
иerrorHudFrameLayout
опускаются по той же причине, поскольку они не имеют прямого отношения к получению высоты строки состояния.источник
Версия Kotlin, которая сочетает в себе два лучших решения
status_bar_height
значение, если присутствуетstatus_bar_height
нет, вычисляет высоту строки состояния из окна Декористочник