Закусочная скрыта нижней навигацией

Мой Snackbar скрыт нижними кнопками навигации.

Скрытая закусочная

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

Мой макет XML:

<FrameLayout
    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/image_background"
    tools:context="link.standen.michael.slideshow.ImageActivity">

    <ImageView
        android:id="@+id/fullscreen_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:keepScreenOn="true"
        android:contentDescription="@string/image_description"/>

    <!-- Image Details Overlay -->
    <LinearLayout
        android:id="@+id/image_details1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|start"
        android:orientation="vertical"
        android:visibility="gone"
        android:background="@color/black_overlay"
        android:padding="@dimen/overlay_padding">

        ...

    </LinearLayout>

    <!-- This FrameLayout insets its children based on system windows using
         android:fitsSystemWindows. -->
    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">

        <RelativeLayout
            android:id="@+id/fullscreen_content_controls"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            tools:ignore="UselessParent">

            <LinearLayout
                android:id="@+id/fullscreen_content_controls_buttons"
                style="?metaButtonBarStyle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_alignParentBottom="true"
                android:layout_centerHorizontal="true"
                android:background="@color/black_overlay"
                android:orientation="horizontal">

                ...
            </LinearLayout>

            <!-- Image Details Overlay -->
            <LinearLayout
                android:id="@+id/image_details2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_above="@+id/fullscreen_content_controls_buttons"
                android:layout_alignParentStart="true"
                android:orientation="vertical"
                android:background="@color/black_overlay"
                android:padding="@dimen/overlay_padding">

             ...

            </LinearLayout>
        </RelativeLayout>
    </FrameLayout>

</FrameLayout>

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

Флаги, используемые для полноэкранного просмотра:

mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
        | View.SYSTEM_UI_FLAG_FULLSCREEN
        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
        | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY
        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);

Какие изменения мне нужно внести в макет, чтобы правильно выровнять закусочную?


person Milk    schedule 10.09.2017    source источник
comment
Вы пытались обернуть свой макет в CoordinatorLayout?   -  person Avi Cherry    schedule 11.09.2017
comment
Макет @AviCherry Coordinator, похоже, не отличается.   -  person Milk    schedule 11.09.2017
comment
Как насчет добавления android:fitsSystemWindows="true" в макет?   -  person Avi Cherry    schedule 11.09.2017
comment
android:fitsSystemWindows=”true” уже есть в моем макете. Это на вложенном FrameLayout. Я попытался добавить coordinatorLayout в него и использовать его в качестве исходного представления для snackbar, но это приводит к тому, что snackbar появляется в том же месте, даже в полноэкранном режиме (т.е. не прикреплен к нижней части экрана).   -  person Milk    schedule 11.09.2017
comment
Когда вы выходите из полноэкранного режима, вы переворачиваете все эти флаги?   -  person Avi Cherry    schedule 11.09.2017
comment
Вы не можете поменять местами флаги, у некоторых нет прямых противоположностей. Но да, я применяю соответствующие флаги обратно при выходе из полноэкранного режима.   -  person Milk    schedule 11.09.2017


Ответы (1)


Я нашел решение.

Когда приложение находится в полноэкранном режиме, snackbar прикрепляется к основному полноэкранному содержимому. R.id.fullscreen_content в данном случае.

Когда приложение не находится в полноэкранном режиме, snackbar присоединяется к новому CoorderinatorLayout, вложенному в FrameLayout с android:fitsSystemWindows="true".

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

person Milk    schedule 11.09.2017