我正在开发一款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>
如文档中所述,它通常用于容纳单个子级,并且由于您正在计算linearlayout运行时的高度,因此它不会获得其获取的高度。您应该使用"约束布局"one_answers"添加"按钮作为linearlayout的子项,而不是第二个Framelayout标记。类似这样的东西:
<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>