Фрагмент полноэкранного режима Android не отображает элементы за панелями навигации и состояния

Я разрабатываю игру для Android. Он состоит из одного основного действия и нескольких фрагментов, и навигация по ним осуществляется с помощью компонента навигации. У меня есть небольшая проблема, которая сводит меня с ума. Основное действие правильно установлено в полноэкранном режиме, панели состояния и кнопки скрыты правильно, а фоновое изображение, которое я выбрал, отображается полностью в полноэкранном режиме. Говоря о фрагментах, кажется, что их элементы скрыты под строкой состояния или что размер макета не соответствует фактическому размеру экрана. Если я размещу кнопку в самом низу макета, как вы можете видеть на этом скриншоте на самом деле на экране происходит это (обратите внимание, что кнопка обрезана именно там, где панель кнопок должна быть). Я использовал в качестве модели полноэкранный фрагмент, предоставленный в студии Android, и в нем используются следующие флаги.

 int flags = 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;

Я также пытался добавить android:fitsSystemWindows="true" в корневой макет фрагмента, но это не сработало.

EDIT
Проблема каким-то образом вызвана тем, что FragmentContainerView не является полноэкранным. Я попытался установить фон для него вместо его родителя, и изображение было вырезано: скриншот

Схема основной деятельности:

<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="@drawable/colourful_sound_waves_pattern_phone_wallpaper__1_"
    android:theme="@style/ThemeOverlay.LOCAL.FullscreenContainer"
    tools:context=".FullscreenActivity"
    android:id="@+id/frame_layout">
    <FrameLayout
        android:id="@+id/fullscreen_content"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"
        android:keepScreenOn="true"
        android:fitsSystemWindows="true">
        <androidx.fragment.app.FragmentContainerView
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/nav_host_fragment"
            android:name="androidx.navigation.fragment.NavHostFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:defaultNavHost="true"
            app:navGraph="@navigation/nav_graph" />

        <LinearLayout
            android:id="@+id/fullscreen_content_controls"
            style="@style/Widget.Theme.LOCAL.ButtonBar.Fullscreen"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="bottom|center_horizontal"
            android:orientation="horizontal"
            tools:ignore="UselessParent">
        </LinearLayout>
    </FrameLayout>
</FrameLayout>


comment
Можете ли вы поделиться своим макетом активности xml?   -  person Onur D.    schedule 27.04.2021
comment
Я выложил макет!   -  person zingiest    schedule 27.04.2021


Ответы (1)


Как упоминалось в документе, он обычно используется для хранения одного дочернего элемента, и поскольку вы вычисляете высоту среды выполнения linearlayout, она не получает требуемой высоты. Вместо второго тега Framelayout вы должны использовать Constraintlayout и добавить кнопку как дочерний элемент linearlayout. Что-то вроде этого:

<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="@drawable/colourful_sound_waves_pattern_phone_wallpaper__1_"
android:theme="@style/ThemeOverlay.LOCAL.FullscreenContainer"
tools:context=".FullscreenActivity"
android:id="@+id/frame_layout">
<androidx.constraintlayout.widget.ConstraintLayout
    android:id="@+id/fullscreen_content"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:keepScreenOn="true"
    android:fitsSystemWindows="true">
    <androidx.fragment.app.FragmentContainerView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/nav_host_fragment"
        android:name="androidx.navigation.fragment.NavHostFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:defaultNavHost="true"
        app:navGraph="@navigation/nav_graph" />

    <LinearLayout
        android:id="@+id/fullscreen_content_controls"
        style="@style/Widget.Theme.LOCAL.ButtonBar.Fullscreen"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_gravity="bottom|center_horizontal"
        android:orientation="horizontal"
        tools:ignore="UselessParent">
    </LinearLayout>
</FrameLayout>
person nidhi    schedule 28.04.2021