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>
атрибутов.