it-roy-ru.com

Строка состояния становится белой и не отображает содержимое позади нее

Я пробую AppCompat на Зефир. И я хочу иметь прозрачную строку состояния, однако она становится белой. Я пробовал пару решений, но они не работали для меня ( Прозрачная строка состояния не работает с 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>

 enter image description here

68
pt2121

Я исправил проблему, изменив макет Activity с 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 . Эти инструменты могут помочь вам.

5
pt2121

Я нашел ответ по этой ссылке: Цвет строки состояния не меняется с относительным расположением в качестве корневого элемента

Оказывается, нам нужно удалить 

      <item name="Android:statusBarColor">@Android:color/transparent</item>

в styles.xml (v21). И это прекрасно работает для меня.

133
Phoenix Wang

(Немного опоздал на вечеринку, но это может кому-то помочь)

У меня была точно такая же проблема. Почему-то некоторые действия были нормальными, в то время как новые, которые я создавал, отображали белую строку состояния вместо значения 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" это решение не работает для меня.

Испытано на Леденец и Зефир 

92
Mauro Banze
 <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 должен быть вашим ожидаемым цветом, а не ПРОЗРАЧНЫМ

10
Shrini Jaiswal

После неудачной попытки всего вышеперечисленного я обнаружил, что явная установка темы устранила проблему.

setTheme(R.style.AppTheme);

Это должно идти до super.OnCreate () в вашей деятельности.

9
James Britton

Добавьте это в ваш style.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);
7
Michele Lacorte

Просто поместите этот элемент в ваш v21\styles.xml:

правда

Это должно выглядеть так:

<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
Rami

Я столкнулся с той же проблемой. Что я сделал, в файле "v21/styles.xml" изменил значение true:

 <item name="windowDrawsSystemBarBackgrounds">true</item>

чтобы:

 <item name="windowDrawsSystemBarBackgrounds">false</item>
6
Degomos

Просто удалите следующий тег из стиля v21 @Android: Цвет/прозрачный

Это работает для меня.

4
Shendre Kiran

Вы должны добавить это свойство в свой стиль, чтобы увидеть содержимое

<item name="Android:windowLightStatusBar" tools:ignore="NewApi">true</item>
3
Andres Paez

Лучший подход

Проверьте файл 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>
3
Nilesh Mahant

Для меня это сработало следующим образом: 

  1. Установить тему .NoActionBar
  2. Оберните панель инструментов в Android.support.design.widget.AppBarLayout
  3. Сделайте Android.support.design.widget.CoordinatorLayout родительским макетом. 

По сути, это третий шаг, который рисует строку состояния в colorPrimaryDark, иначе она не рисуется, если вы используете тему NoActionBar. 2-й шаг даст вашей панели инструментов, что наложение

2
priyankvex

Я не уверен, что уже поздно, но я надеюсь, что это кому-нибудь поможет. * Создайте поддельный вид с прозрачным фоном, который соответствует макету, и создайте координатный макет в качестве корневого элемента макета.

<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

1
vahidlazio
<item name="Android:statusBarColor">@Android:color/transparent</item>

Вы увидите эту строку кода в values ​​/ styles/styles.xml (v21). Удалите это, и это решает проблему

Ссылка на этот ответ

1
Phares

[Output]

Разверните res -> values ​​-> каталог стилей с панели проекта.

Откройте файл styles.xml (v21)

ИСПОЛЬЗУЙТЕ ЛЮБОЙ ОТ НИЖЕ ПУТИ

  1. Измените true на false в свойстве Android:windowDrawsSystemBarBackgrounds.
  2. Измените @Android: цвет/прозрачный на @ color/colorPrimaryDark в свойстве Android:statusBarColor.
  3. Удалите строку свойства Android:statusBarColor.
0
Ketan Ramani

проверьте цветовые схемы, реализованные в стилях-21

0
Shivegeeky

Для стилей 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>
0
Ankit Aman

Если вы используете 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"
    >
    ...

Хорошее кодирование!

0
Faustino Gagneten

Я предполагаю, что это вызвано вашим Android:windowBackground. Является ли @color/background_material_light ссылкой на белый?

0
hanspeide

Отметьте это Панель инструментов становится белой - панель приложений не отображается после того, как вы прокрутите экран

https://code.google.com/p/Android/issues/detail?id=178037#c19

Я использую библиотеки 23.0.0. и ошибка все еще происходит. 

Обходным путем для этого является добавление View, который почти не занимает места и может быть невидимым. Смотрите структуру ниже.

<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 - Макет иногда невидим после входа в представление (даже если он не введен)

0
clickdroid

Если ваш v21/styles.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>

Работает нормально. Надеюсь, это полезно. Благодарю.

0
sahu