Прозрачная строка состояния не работает с windowTranslucentNavigation= " false"
Я разрабатываю Activity
где мне нужно сделать панель навигации непрозрачной, а строку состояния прозрачной на устройствах под управлением 5.0+ (API 21+). Ниже приведены стили, которые я использую, а также объяснение моей проблемы.
AppTheme
выходит Theme.AppCompat.Light.NoActionBar
<item name="android:statusBarColor">@color/transparent</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/welbe_red_transparent</item>
FullscreenTheme
выходит AppTheme
<item name="android:windowNoTitle">true</item>
<item name="android:statusBarColor">@color/transparent</item>
<item name="android:windowTranslucentNavigation">true</item>
это делает приложение выглядит это
если я удалить android:windowTranslucentNavigation
стиль, или установите его в false
на Fullscreen
, он исправляет проблему панели навигации. Проблема в том, что строка состояния становится полностью белой вместо того, чтобы оставаться прозрачной и отображать содержимое за ней.
Я пробовал использовать fitsSystemWindow="true"
в моих макетах, но это не исправило проблему. Кто-нибудь знает, почему это происходит?
3 ответов
android:windowTranslucentNavigation
делает одну вещь, что android:statusBarColor
не делает, что просит SYSTEM_UI_FLAG_LAYOUT_STABLE
и SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
флаги.
это те, которые вам нужно запросить, чтобы рисовать за строкой состояния.
запросить их в onCreate
вашего Activity
:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN);
в качестве альтернативы вы также можете просто установить фон темы приложения, и это также появится за вашей строке состояния.
дополнительная информация здесь.
насколько я знаю, нет правильного способа установить цвет строки состояния на APIs ниже 19.
для API 19+ Вы можете использовать аналогичный атрибут windowTranslucentNavigation
только для строки состояния:
<item name="android:windowTranslucentStatus">true</item>
Примечания:
-
причина, по которой вы получали белую строку состояния из-за
<item name="android:statusBarColor">@color/transparent</item>
здесь хаки это работает на конкретных устройствах производителя, но я бы не используй их сам.
Я борюсь с этим более 3 часов. Оберните все в CoordinatorLayout это единственный, который, кажется, обращает внимание на fitsSystemWindow= "true"или " false"
Это мой основной фрагмент активности
<android.support.design.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content_main"
android:layout_width="match_parent"
android:layout_height="match_parent">
<include layout="@layout/layout_google_map"/>
<include layout="@layout/layout_toolbar_transparent"/>
<include layout="@layout/layout_action_buttons"/>
<include layout="@layout/layout_bottom_sheet"/>
</android.support.design.widget.CoordinatorLayout>
Это мой макет панели инструментов
<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.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/transparent"
android:theme="@style/ToolbarTheme"
app:popupTheme="@style/AppTheme.PopupOverlay">
<android.support.v7.widget.AppCompatImageView
android:layout_width="wrap_content"
android:layout_height="?actionBarSize"
android:layout_centerHorizontal="true"
android:layout_gravity="center"
android:adjustViewBounds="true"
app:srcCompat="@drawable/ic_fynd_logo_red"/>
</android.support.v7.widget.Toolbar>
</android.support.design.widget.CoordinatorLayout>
Как вы можете видеть, мой макет фрагмента делает карту google нарисованной в строке состояния.
у меня есть панель действий, где логотип компании идет.
и другой пользовательский интерфейс кнопки "layout_action_buttons" также завернуты в макет координатора , поэтому fitsSystemsWindows работает.
проверить.