Simple CoordinatorLayout не отображается за панелью навигации

Даны следующие стили:

style.xml

<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDrawsSystemBarBackgrounds">true</item>
    <item name="android:statusBarColor">@android:color/transparent</item>
    <item name="android:navigationBarColor">@android:color/transparent</item>
</style>

И следующий макет деятельности:

activity.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/red"
    android:fitsSystemWindows="true"/>

Я могу показать его только за строкой состояния, но не за панелью навигации:

введите описание изображения здесь

Если я удалю android:fitsSystemWindows="true" атрибут, то я даже не могу показать его за строкой состояния.

Если я использую другое представление, кроме CoordinatorLayout он также не будет отображаться за решеткой, даже если android:fitsSystemWindows="true" приписывать.

Как я могу сделать эту работу, не делая это программно? Если это невозможно, то как я могу сделать это программно?

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

РЕДАКТИРОВАТЬ: Я не желаю никакого оттенка на решетках, поэтому я не использовал полупрозрачные варианты. Целью является то, что изображено на скриншоте, но с красной раскладкой, идущей и за панелью навигации.

Это нацелено на API 21 и выше.

1 ответ

Вам нужно добавить эти атрибуты в своем стиле, но для этого требуется уровень API 19 +:

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:fitsSystemWindows">true</item>

Вы можете прочитать о WindowInsets а также android:fitsSystemWindows в этой статье

РЕДАКТИРОВАТЬ: если вы хотите удалить оттенок, просто добавьте этот код в onCreate() метод:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
    Window w = getWindow();
    w.setFlags(
       WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, 
       WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
    );
}

И удалить

<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>

атрибутов.