Android Lollipop: ImageView игнорирует атрибут fitsSystemWindows (прозрачная строка состояния)

В настоящее время я работаю над приложением, для которого я хочу включить прозрачную строку состояния. Я хочу, чтобы ImageView (который мне нужен для его атрибута scaleType) для покрытия всего экрана, чтобы изображение отображалось ниже строки состояния. Здесь мой макет:

<android.support.v4.widget.DrawerLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:adjustViewBounds="true"
            android:fitsSystemWindows="true"
            android:scaleType="centerCrop"
            android:src="@drawable/picture" />

        <android.support.v7.widget.Toolbar
            (...toolbar stuff...)
        />

        (...some other stuff...)

    </RelativeLayout>

    <include layout="@layout/drawer" />
</android.support.v4.widget.DrawerLayout>

Как вы можете видеть, это обычный DrawerLayout. Обратите внимание, что для атрибутов DrawerLayout, RelativeLayout и ImageView атрибут fitsSystemWindows установлен равным true.

Моя проблема: Если я установил фоновый ресурс (например, цвет или изображение) в DrawerLayout или RelativeLayout в приведенном выше коде, я могу видеть, что цвет или изображение "ниже" строка состояния, точно так же, как я ее хочу, но ImageView 'src' drawable всегда отображается под ним, как если бы он полностью игнорировал атрибут fitsSystemWindows.

У меня есть следующие атрибуты в моей теме:

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@color/primary_dark</item>

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

Ответ 1

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

У вас есть android:fitsSystemWindows="true" в каждом параметре viewGroup. Попробуйте оставить только один в ImageView.

Или полностью удалить все из них.

Ответ 2

fitSystemWindows

не работает в RelativeLayout. Используйте FrameLayout или ViewGroup, расширяющие FrameLayout

Ответ 3

Потому что android:fitsSystemWindows="true" добавит дополнение к ImageView, поэтому src окажется ниже строки состояния. Размер заполнения - это вставки (высота строки состояния). Вы можете использовать FitsSystemWindowsFrameLayout для решения этой проблемы.