- Show and hide android notification bar without causing a layout jerk
- FLAG_LAYOUT_NO_LIMITS | FLAG_LAYOUT_IN_SCREEN
- Могу ли я установить FLAG_LAYOUT_NO_LIMITS только для строки состояния?
- ОТВЕТЫ
- Ответ 1
- Ответ 2
- Ответ 3
- Ответ 4
- Ответ 5
- Ответ 6
- Ответ 7
- Ответ 8
- Ответ 9
- Ответ 10
- Ответ 11
- Полноэкранный режим в Android?
- 30 ответов
- I. Ваше основное приложение — это тема Theme.AppCompat.Light.DarkActionBar .
- II. Основная тема вашего приложения — Theme.AppCompat.Light.NoActionBar .
- Для Androidx
- 1. Прозрачная строка состояния
- 2. Прозрачная строка состояния и нижняя панель навигации.
- 3. Скрыть строку состояния
- 4. Скрыть панель Statubar и Bottomnav.
- WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS не меняется цвет строки состояния
- 3 ответа
- Похожие вопросы:
Show and hide android notification bar without causing a layout jerk
Many android apps require toggling between full screen and non full screen view (lets call it framed screen) smoothly.
Typical apps which require this feature include social networking apps (which require maximum use of the space to accomodate infinite timeline like features), ebook reader apps, image gallery apps, video player etc.
By default, whenever you request for full screen mode, the activity will resize instantly to take the extra space and the this causes the child views to shift in position slightly to the top. This leads to a bad UX since the user does not expect the view to shift in position.
You can use the following method in your Activity to switch to full screen mode (which will hide the top notification bar)
Please note that some devices (like galaxy tab) dont have the top notification bar (a.k.a status bar), but have a navigation bar at the bottom which also acts like a notification/status bar. For such devices, there is no difference between full screen and framed screen modes. The navigation bar at the bottom can never be hidden. It can only be put into low profile mode, where the buttons turn into tiny dim dots. If you use the above code snippet to switch to fullscreen, the device will silently ignore the flags (no exceptions). Also you cannot make a generalisation about tablets not having a top notification bar, since devices like nexus 7 have both top and bottom bars. Be warned that there is no direct api to detect whether the device has a top bar and/or a bottom bar nor their heights. People have figured out a few hacks which rely on subtracting the app height from the device’s screen height to figure out things, but they are not very reliable. So do not try to write any code which makes any kind of assumption about the height of the bars.
In Mac OSX Lion GUI, fullscreen mode is handled in a clever way. Whenever a window goes into fullscreen mode, they crossfade between a snapshot of the windowed layout and a snapshot of the fullscreen. Doing the same in android would be a overkill, since the window resizes only by about 40dp, unlike mac where it could be commonly in the range of 100 – 1000 pixels width and height;
Let us go through some of the common methods we can use for a smooth transition between full screen and framed views in android.
FLAG_LAYOUT_NO_LIMITS | FLAG_LAYOUT_IN_SCREEN
For most apps this would be the easiest way of smooth transitioning. This flag basically lets android know that your layout should always take up all the available screen space (irrespective of the notification bar).
Try this code snippet in your onCreate method :
This means that the first child in your view group will start drawing from the top left of your screen (behind your notification bar). So switching between full screen and framed screen would not cause a resize and hence avoid a jerk. What you could do additionally is,specify a top padding of around 40 – 50 dp. Now, when you go fullscreen, you will see an empty space behind the notification bar which might work well for most applications.
The only problem with this approach is when you use honeycomb’s action bar (or its gingerbread backport called action bar sherlock).
Since you have specified that the application has no limits, action bar gets drawn behind the notification bar, which looks ugly since all your icons gets clipped at the top. A quick fix to this problem is to specify a top padding for your action bar.
This can be done using action bar styles. Refer this article which talks about theming action bar. Using this technique, you can specify android:paddingTop to around 40 dp which will draw some empty space to accomodate the notification bar. You will also need to increase the height of the action bar using android:height attribute.
Источник
Могу ли я установить FLAG_LAYOUT_NO_LIMITS только для строки состояния?
Мне нужно сделать прозрачную строку состояния. Я использую getWindow().addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) , и это строка состояния, как я хочу. Но это также влияет на панель навигации: она стала прозрачной, а getWindow().setNavigationBarColor(Color.BLACK) ничего не делать.
Есть ли способ сделать только прозрачную панель состояния, а не панель навигации?
ОТВЕТЫ
Ответ 1
эта работа для меня
строка состояния будет прозрачной или полупрозрачной, панель навигации не будет
надеюсь это поможет!
Ответ 2
Какой у меня точно рабочий код (преобразованный в котлин) ниже здесь.
Ответ 3
Ответ 4
Прокрутите вниз, чтобы проверить, как выглядит конечный результат
Прежде всего, определите ваш файл styles.xml как this-
НЕ добавляйте следующую строку
Добавление строки выше НЕ сместит макет вверх, когда программная клавиатура отображается в диалоге с EditText
Затем переопределите этот стиль в стилях v21 и v23, например this-
Код деятельности — Котлин
Код активности — Java
Конечный результат
Ответ 5
Ответ 6
Вы можете использовать это для скрытия строки состояния и панели навигации
и для отображения навигации снова используйте этот
цвет серый для меня, возможно, вы можете заставить его использовать свой основной цвет
Ответ 7
Просто флаг выше работал для меня. Кнопки навигации видны, строка состояния и панель действий скрыты.
Не работает. Тестовое устройство Nexus 5.
Ответ 8
я нашел решение bro
а затем примените эту прозрачную тему к манифесту активности, подобному этому
Ответ 9
да, этот код можно использовать в Style.xml
Затем, чтобы применить его к вашему макету, просто добавьте следующую строку в корневой макет (представление):
Ответ 10
Ответ 11
Это работает на Samsung S10+ (Pie), Oppo F7 и Oppo F5S (Oreos):
По просьбе автора постера область приложения расширяется сверху и закрывает строку состояния (там, где часы). Но навигационные (виртуальные) кнопки андроида остаются внизу экрана, а приложение располагается поверх кнопок андроида.
Источник
Полноэкранный режим в Android?
Как сделать действие в полноэкранном режиме? Я имею ввиду без панели уведомлений. Любые идеи?
30 ответов
Вы можете сделать это программно:
Или вы можете сделать это через файл AndroidManifest.xml :
Изменить:
Если вы используете AppCompatActivity, вам необходимо добавить новую тему
А затем использовать его.
В KitKat есть метод, называемый иммерсивным полноэкранным режимом. .
Если вы не хотите использовать тему @android:style/Theme.NoTitleBar.Fullscreen , потому что вы уже используете собственную тему, вы можете использовать android:windowFullscreen .
В файле AndroidManifest.xml :
Или в коде Java :
Если вы используете AppCompat и ActionBarActivity, используйте этот
Будь осторожен с
Если вы используете какой-либо метод для установки панели действий следующим образом:
Это вызовет исключение нулевого указателя.
Попробуйте это с appcompat из style.xml . Он обеспечивает поддержку всех платформ.
Затем введите имя в свой манифест .
AndroidManifest.xml
I. Ваше основное приложение — это тема Theme.AppCompat.Light.DarkActionBar .
Для скрытия ActionBar / StatusBar
style.xml
Чтобы скрыть системную панель навигации
II. Основная тема вашего приложения — Theme.AppCompat.Light.NoActionBar .
Для скрытия ActionBar / StatusBar
style.xml
Чтобы скрыть системную панель навигации
Подобно , как Theme.AppCompat.Light.DarkActionBar .
Спасибо за ответ @Cristian, я получал ошибку
android.util.AndroidRuntimeException: requestFeature () необходимо вызывать перед добавлением содержимого
Я решил это используя
Показать Full Immersive:
Выйти из режима полного погружения:
Для Androidx
1. Прозрачная строка состояния
2. Прозрачная строка состояния и нижняя панель навигации.
3. Скрыть строку состояния
4. Скрыть панель Statubar и Bottomnav.
где разместить этот код?
Примечание
- Я проверил этот код в эмуляторе Pixel 3A
- Возможно, настройка ОС Android не поддерживается
- установить стиль
Примечание: в моем случае мне пришлось использовать name=»windowActionBar» вместо name=»android:windowActionBar» , прежде чем он заработал должным образом. Поэтому я просто использовал и то, и другое, чтобы убедиться, что позже мне нужно будет перейти на новую версию Android.
Вот пример кода. Вы можете включить / выключить флаги, чтобы скрыть / показать определенные части.
Затем вы сбрасываете в состояние по умолчанию :
Вы можете вызывать указанные выше функции со своего onCreate :
КОТЛИН
Следуя документу Google, есть простой способ:
СОВЕТ: Использование getWindow (). SetLayout () может испортить полноэкранное отображение! Обратите внимание на документацию по этому методу:
Установите параметры макета ширины и высоты окна . вы можете изменить их на . абсолютное значение, чтобы окно не было полноэкранным.
Для моих целей я обнаружил, что мне нужно использовать setLayout с абсолютными параметрами, чтобы правильно изменить размер полноэкранного окна. В большинстве случаев это работало нормально. Он был вызван событием onConfigurationChanged (). Однако произошла икота. Если пользователь вышел из приложения, изменил ориентацию и снова вошел, это привело бы к срабатыванию моего кода, который включал setLayout (). Во время этого временного окна повторного входа моя строка состояния (которая была скрыта манифестом) должна была появиться снова, но в любое другое время setLayout () не вызовет этого! Решением было добавить дополнительный вызов setLayout () после вызова с такими жесткими значениями:
Затем окно правильно изменило размер, и строка состояния больше не появлялась независимо от события, которое это вызвало.
У меня это сработало.
Это сработало для меня. Надеюсь, это тебе поможет.
С котлином я поступил так:
Иммерсивный режим
Иммерсивный режим предназначен для приложений, в которых пользователь будет активно взаимодействовать с экраном. Примерами являются игры, просмотр изображений в галерее или чтение содержимого с разбивкой на страницы, например книги или слайдов в презентации. Для этого просто добавьте следующие строки:
Липкий иммерсивный
В обычном иммерсивном режиме каждый раз, когда пользователь проводит пальцем от края, система заботится о том, чтобы отобразить системные панели — ваше приложение даже не узнает о том, что жест произошел. Поэтому, если пользователю действительно может потребоваться провести пальцем от края экрана как часть основного взаимодействия с приложением — например, при игре в игру, которая требует большого пальца руки, или при использовании приложения для рисования — вам следует вместо этого включить «липкий» иммерсивный режим. .
Для получения дополнительной информации: Включить полноэкранный режим
В случае, если вы используете клавиатуру, иногда бывает, что StatusBar отображается при появлении клавиатуры. В этом случае я обычно добавляю это в свой стиль xml
А также эту строку в моем манифесте
Просто вставьте этот код в метод onCreate()
Источник
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS не меняется цвет строки состояния
я делаю приложение галереи в android, в котором изображение находится в полноэкранном режиме. Так что он использовал нижеприведенную строку
Теперь это работает нормально , я имею в виду, что изображение теперь полноэкранное, но проблема возникает, когда фон изображения белый, так как цвет значка строки состояния белый, поэтому он выглядит так, как будто строки состояния нет .
Чтобы решить эту проблему, я пытаюсь установить цвет строки состояния следующим образом.
Но это тоже не работает . Я пробовал устанавливать другие значения, такие как.
Но это тоже не работает ! Не могли бы вы, пожалуйста, помочь мне, как я могу сделать цвет строки состояния transparent при установке
3 ответа
У меня есть этот код : import React from ‘react’; import < View, StatusBar >from ‘react-native’; export default class App extends React.Component < render() < return ( ); >> и я запускаю его под EXPO.
Я хочу установить прозрачную строку состояния, а не Панель навигации. что я пробовал window.setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) Но он установил строку состояния и панель навигации прозрачными. Я хочу только прозрачную строку.
Попробуйте сделать это в действии перед установкой представления содержимого
где getFactorColor метод-это
установка флага на FLAG_LAYOUT_NO_LIMITS делает строку состояния полностью прозрачной и не может иметь никакого цвета, удалите эти флаги, а затем измените цвет.
EDIT: как я добился того, чего вы хотите(то есть строка состояния должна быть внутри приложения и иметь слой некоторого цвета и определенной прозрачности):
и ваша тема должна иметь эти два тега
Добавьте этот метод
и назовите это как Utilities.setStatusBarColor(R.color.someColor, context);
android имеют прозрачный цвет Color.TRANSPARENT
или добавьте это в свой colors.xml
надеюсь, что это поможет!
Когда я меняю цвет фона строки состояния на родной UIColor.gray, он меняется. Но когда я хочу использовать пользовательский цвет, он становится черным. UIApplication.shared.statusBarView?.backgroundColor = UIColor.gray -этот код работает правильно. Цвет фона строки состояния серый.
Я столкнулся со странной проблемой. Внезапно цвет моей строки состояния не меняется на тот же цвет, что и моя панель навигации в моем tabbarcontroller. Я пробовал установить цвет навигационной панели self.navigationController!.navigationBar.barTintColor = UIColor(red: 57, green: 79, blue: 116).
Похожие вопросы:
Я, по-видимому, не понимаю, как использовать оттенок строки состояния в iOS 6. Я читал этот вопрос: Измените цвет оттенка панели состояния , но реализация предложенных там решений не решила эту.
Я знаю, что есть так много вопросов/ответов, связанных с моим вопросом, но никто не может мне помочь. Как сказал мой титул в моем заявлении (iPad база ) Я хочу изменить цвет текста statusBar в iOS 7.
у меня есть действие и фрагмент в моем проекте. В упражнении я устанавливаю макет на весь экран,а во фрагменте пытаюсь программно изменить цвет строки состояния. Строка состояния отображается поверх.
Источник