Строка состояния становится белой и не отображает содержимое за ней
Я пробую AppCompat на зефир. И я хочу иметь прозрачную строку состояния, однако она становится белой. Я пробовал несколько решений, но они не работали для меня (прозрачная строка состояния не работает с windowTranslucentNavigation="false", Lollipop : draw behind statusBar с его цветом, установленным на прозрачный). Вот соответствующий код.
мои стили.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>
20 ответов:
Я нашел ответ в этой ссылке: цвет строки состояния не меняется с относительной компоновкой в качестве корневого элемента
Так получается, нам нужно удалить
<item name="android:statusBarColor">@android:color/transparent</item>
в стилях.xml (v21). И это прекрасно работает для меня.
(немного опоздала на вечеринку, но это может помочь кому-то)
у меня была точно такая же проблема. Так или иначе, некоторые действия были нормальными, в то время как новые, которые я создал, показывали белую строку состояния вместо
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"
это решение не работает для меня.тестируется на леденец и зефир
после неудачной попытки все вышеперечисленное я обнаружил, что явно установка темы Исправлена проблема.
setTheme(R.style.AppTheme);
Это должно идти перед супер.OnCreate () в вашей деятельности.
добавить это в свой стиль.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);
просто поместите этот элемент в свой 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>
я исправил свою проблему, изменив макет активности с 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>
попробовать иерархия-просмотра или ViewInspector. Эти инструменты могут помочь вам.
я столкнулся с той же проблемой. То, что я сделал, было в "v21/styles.xml " файл a изменил значение true:
<item name="windowDrawsSystemBarBackgrounds">true</item>
to:
<item name="windowDrawsSystemBarBackgrounds">false</item>
<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 должен быть вашим ожидаемым цветом, а не прозрачным
лучше
Проверьте ваш стиль.xml-файл, в котором находится ваша тема NoActionBar. Убедитесь, что у него есть родитель в качестве темы.Совместимости приложений.NoActionBar, а также настроить его, добавив свою цветовую схему. Наконец, установить свои темы в манифесте по мере необходимости.
Ниже приведен пример моего стиля.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>
для меня это сработало следующим образом :
- установить тему
.NoActionBar
- оберните панель инструментов в
android.support.design.widget.AppBarLayout
- сделать
android.support.design.widget.CoordinatorLayout
как макет родителей.по существу это третий шаг, который рисует строку состояния в
colorPrimaryDark
в противном случае он не тянет, если вы используетеNoActionBar
тема. 2-й шаг даст вашей панели инструментов, что оверлея.
Я не уверен, что это поздно, но я надеюсь, что это поможет кому-то. * Сделайте поддельный вид с прозрачным фоном, который соответствует макету, и сделайте coordinatorlayout в качестве элемента корневого макета.
<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
<item name="android:statusBarColor">@android:color/transparent</item>
вы увидите эту строку кода в значениях / стилях / стилях.xml (v21). Удалите его, и это решает проблему
Я предполагаю, что это вызвано вашим
android:windowBackground
. Это@color/background_material_light
ссылка на белый?
проверить это Панель инструментов становится белым-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-макет иногда невидимый, как только он входит в представление (даже если он не введен)
для стилей v23
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowLightStatusBar">true</item> <item name="android:statusBarColor">@android:color/white</item> </style>
для стилей v21
<style name="MyTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:windowTranslucentStatus">true</item> <item name="android:statusBarColor">@android:color/white</item> </style>
[
разверните каталог res -> values - > styles на панели проекта.
открыть стили.xml (v21)
ИСПОЛЬЗУЙТЕ ЛЮБОЙ ИЗ СПОСОБОВ СНИЗУ
- изменить правда до ложные на
android:windowDrawsSystemBarBackgrounds
собственность.- изменить @android: цвет / прозрачный до @color / colorPrimaryDark на
android:statusBarColor
собственность.- удалить
android:statusBarColor
свойства линия.
Если вы используете RelativeLayout / CoordinatorLayout это решение, которое работает для меня:
вы должны использовать
- CoordinatorLayout
- AppBarLayout
помните, чтобы использовать CoordinatorLayout вместо RelativeLayout (производительность лучше и отлично работает с AppBarLayout)
вот как должен начинаться ваш фрагмент
<?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:background="@android:color/background_light" android:fitsSystemWindows="true" > <android.support.design.widget.AppBarLayout android:id="@+id/main.appbar" android:layout_width="match_parent" android:layout_height="300dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:fitsSystemWindows="true" > ...
хорошего кода!
Если ваш v21 / стили.xml содержит
<resources> <style name="AppTheme.NoActionBar"> <item name="windowActionBar">false</item> <item name="windowNoTitle">true</item> <item name="android:statusBarColor">@android:color/transparent</item> </style> </resources>
затем, удалить или комментарий ниже строки или изменить цвет строки состояния,
<item name="android:statusBarColor">@android:color/transparent</item>
его работает нормально. Надеюсь, что это полезно. Спасибо.