Строка состояния становится белой и не отображает содержимое за ней
Я тестирую AppCompat на Marshmallow. И я хочу иметь прозрачную строку состояния, но она становится белой. Я пробовал пару решений, но они не работали для меня (Прозрачная строка состояния, не работающая с windowTranslucentNavigation = "false" , Lollipop: нарисуйте статус statusBar с цветом, установленным на прозрачность). Здесь соответствующий код.
Мои styles.xml
<style name="Bacon" parent="Theme.Bacon"/>
<style name="Theme.Bacon" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/theme_primary</item>
<item name="colorPrimaryDark">@color/theme_primary_dark</item>
<item name="colorAccent">@color/theme_accent</item>
<item name="windowActionBar">false</item>
<item name="windowActionBarOverlay">true</item>
<item name="windowNoTitle">true</item>
<item name="android:windowBackground">@color/background_material_light</item>
</style>
<style name="Theme.Bacon.Detail" parent="Bacon"/>
v21
<style name="Bacon" parent="Theme.Bacon">
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
</style>
<style name="Theme.Bacon.Detail" parent="Bacon">
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
Деятельность
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true" />
</FrameLayout>
Фрагмент
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<android.support.design.widget.AppBarLayout
android:id="@+id/appbar"
android:layout_width="match_parent"
android:layout_height="192dp"
android:fitsSystemWindows="true"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
<android.support.design.widget.CollapsingToolbarLayout
android:id="@+id/collapsing_toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
app:contentScrim="?attr/colorPrimary"
app:expandedTitleMarginBottom="32dp"
app:expandedTitleMarginEnd="64dp"
app:expandedTitleMarginStart="48dp"
app:layout_scrollFlags="scroll|exitUntilCollapsed"
app:statusBarScrim="@color/black_trans80">
<ImageView
android:id="@+id/photo"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:contentDescription="@string/photo"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
app:layout_collapseMode="parallax" />
<android.support.v7.widget.Toolbar
android:id="@+id/anim_toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
</android.support.design.widget.CollapsingToolbarLayout>
</android.support.design.widget.AppBarLayout>
![введите описание изображения здесь]()
Ответы
Ответ 1
Я исправил свою проблему, изменив свой макет действия с FrameLayout на RelativeLayout. Спасибо всем, кто пытался помочь!
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent">
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/theme_primary_dark"
android:fitsSystemWindows="true" />
</RelativeLayout>
Попробуйте hierarchy-viewer или ViewInspector. Эти инструменты могут помочь вам.
Ответ 2
(Немного поздно вечеринке, но это может помочь кому-то)
У меня была такая же проблема. Так или иначе, некоторые действия были нормальными, в то время как новые, которые я создал, отображали белую строку статуса вместо значения colorPrimaryDark
.
Попробовав несколько советов, я заметил, что нормальные действия, когда все используют CoordinatorLayout
как корень макета, а для остальных я заменил его на обычные макеты, потому что мне не нужны функции (анимация и т.д.) предоставляется CoordinatorLayout
.
Итак, решение состоит в том, чтобы сделать CoordinatorLayout
корневую компоновку, а затем внутри нее добавить свой прежний корень компоновки. Вот пример:
<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/AppTheme.AppBarOverlay">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/AppTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<!-- your activity content here-->
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>
ОБРАТИТЕ ВНИМАНИЕ, что без android:fitsSystemWindows="true"
это решение не работает для меня.
Протестировано на Lollipop и Marshmallow
Ответ 3
Я нашел ответ в этой ссылке: Строка состояния Цвет не меняется с помощью Относительной компоновки как корневого элемента
Итак, оказывается, нам нужно удалить
<item name="android:statusBarColor">@android:color/transparent</item>
в styles.xml(v21). И это работает отлично для меня.
Ответ 4
После безуспешного тестирования всех вышеизложенных я обнаружил, что явная настройка темы устраняет проблему.
setTheme(R.style.AppTheme);
Это должно пройти до super.OnCreate() в вашей активности.
Ответ 5
Добавьте это в свой стиль .xml
<item name="android:windowTranslucentStatus">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
и это в вашем onCreate();
getWindow().getDecorView().setSystemUiVisibility(
View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
Ответ 6
Просто поместите этот элемент в свой файл v21\styles.xml:
True
Он должен выглядеть так:
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:windowTranslucentStatus">true</item>
</style>
Ответ 7
Для меня это сработало, выполнив следующие действия:
- Задайте тему
.NoActionBar
- Оберните панель инструментов в
android.support.design.widget.AppBarLayout
- Сделайте
android.support.design.widget.CoordinatorLayout
в качестве родительского макета.
По сути, это третий шаг, который рисует строку состояния в colorPrimaryDark
, иначе она не будет нарисована, если вы используете тему NoActionBar
.
Второй шаг даст вашей панели инструментов overlay.
Ответ 8
Я не уверен, что поздно, но я надеюсь, что это поможет кому-то.
* Сделайте поддельный вид с прозрачным фоном, который соответствует макету, и сделайте координатор в качестве элемента корневого макета.
<View
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
android:fitsSystemWindows="true" />
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:scaleType="centerCrop"
android:src="@drawable/something" />
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
.... YOUR LAYOUT
Ответ 9
Я столкнулся с той же проблемой. То, что я сделал, в файле "v21/styles.xml" изменило значение true:
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
в
<item name="android:windowDrawsSystemBarBackgrounds">false</item>
Ответ 10
Я предполагаю, что это вызвано вашим android:windowBackground
. Является ли @color/background_material_light
ссылкой на белый?
Ответ 11
Проверьте это
Панель инструментов становится белой - AppBar не рисуется после прокрутки экрана
https://code.google.com/p/android/issues/detail?id=178037#c19
Я использую библиотеки 23.0.0. и ошибка все еще происходит.
Обходным путем для этого является добавление представления, которое почти не занимает места и может быть невидимым. См. Структуру ниже.
<android.support.v4.widget.NestedScrollView
app:layout_behavior="@string/appbar_scrolling_view_behavior">
</android.support.v4.widget.NestedScrollView>
<android.support.design.widget.AppBarLayout>
<android.support.v7.widget.Toolbar
app:layout_scrollFlags="scroll|enterAlways" />
<android.support.design.widget.TabLayout
app:layout_scrollFlags="scroll|enterAlways" />
<View
android:layout_width="match_parent"
android:layout_height=".3dp"
android:visibility="visible"/>
</android.support.design.widget.AppBarLayout>
Эти вопросы на Stackoverflow.com также относятся к этой ошибке:
Панель инструментов CoordinatorLayout невидима для ввода до полной высоты
AppBarLayout - Макет иногда невидим, когда он входит в представление (даже если он не введен)
Ответ 12
Лучший подход
Проверьте файл style.xml, где есть тема NoActionBar.
Убедитесь, что у родителя есть родительский элемент Theme.AppCompat.NoActionBar, а также настройте его, добавив цветовую схему. Наконец, установите свои темы в манифест, как требуется.
Ниже приведен образец моего файла styles.xml(ActionBar + NoActionBar).
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- No ActionBar application theme. -->
<style name="AppTheme.NoActionBar" parent="Theme.AppCompat.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Ответ 13
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/colorPrimaryDark</item>
</style
Просто замените это, statusBarColor должен быть вашим ожидаемым цветом, а не TRANSPARENT
Ответ 14
Просто удалите следующий тег из стиля v21
@android: цвет/прозрачный
Это работает для меня.