Статус бар цвет остается без цвет прозрачный статус установлено значение true

во-первых, я хочу отметить, что существует огромное количество вопросов с разными ответами и на самом деле я не могу найти хорошего объяснения, обоснования и решение проблемы.

хочу:

  1. С windowTranslucentStatus=true
  2. иногда "рисовать" в строке состояния (например,DrawerLayout)
  3. иногда "не рисовать" в строке состояния и пусть "компоненты / система" рисовать colorPrimaryDark вместо меня. (и, возможно, android:fitsSystemWindows="true")

из различных ресурсов я понял, что есть разница между корневыми макетами, поэтому все мои испытания выполняются с CoordinatorLayout это кажется наиболее подходящим и готовым к этому. (Непосредственно из библиотеки поддержки, включенной во все образцы с панелями инструментов, макетами панели приложений и т. д.)

моя текущая настройка:

compile api 27, поддерживает библиотеки версий 27*

activity_main.XML-код:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    tools:context=".MainActivity">

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

    <fragment
        android:id="@+id/fragment"
        android:name="com.sygic.travel.materialtest5.MainActivityFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</android.support.design.widget.CoordinatorLayout>

ценностей/стили.XML-код:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar"/>
    <style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light"/>
</resources>

значения-v21 / стили.XML-код:

<resources>
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
        <item name="android:windowTranslucentStatus">true</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    </style>
</resources>

что приводит к:

toolbar with status bar without color


вопросы:

  1. можно ли вообще использовать windowTranslucentStatus и fitsSystemWindows и не иметь строку состояния" белый/серый"?
  2. кажется, что нет некоторая поддержка рисования цвета строки состояния в CoordinationLayout, когда fitsSystemWindows, но (внутреннее) свойство (для обработки этого) остается нулевым, как это исправить? Или это только для ручной настройки цвета строки состояния?
  3. в этом случае это вариант стиля android:statusBarColor приняты во внимание? Какой компонент использует это значение? Почему CoordinationLayout не выбирает эту конфигурацию (с ее значением по умолчанию primaryColorDark) и не использует ее?
  4. поддерживается ли какой-либо из других макетов? (Родственник, Линейные, ограничения) они действительно рекомендуются как корневые макеты, когда у них есть эти (упомянутые) недостатки?

Примечания:

1 ответов


хорошо, я попытался проверить код и обнаружил, что это решение! : yay:

во-первых, некоторые ответы на мои вопросы:

  1. Да, это так. Это ответственность приложения (просмотров), чтобы нарисовать что-то. DrawerLayout делает это автоматически, CoordinatorLayout может, см. Далее.
  2. есть свойство app:statusBarBackground который может быть установлен непосредственно на XML-теге в стилях!
  3. Извините, я не знаю (пока! :))
  4. быстрым прогулк-через его кода не похоже, что есть какая-либо поддержка для рисования строки состояния.

таким образом, решение заключается в использовании CoordinatorLayout и statusBarBackground свойства:

values-v21/styles.xml

<resources>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowTranslucentStatus">true</item>
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    <item name="statusBarBackground">@color/colorPrimary</item>
</resources>