StatusBar 与应用的工具栏重叠,并且工具栏在 Android API 30+ 上消失了

StatusBar overlaps app's toolbar and the toolbar is gone on Android API 30+

提问人:Pandarian Ld 提问时间:10/6/2023 更新时间:10/9/2023 访问量:50

问:

我在 Android API 30+ 上遇到了应用程序的工具栏问题。设备的状态栏与应用的工具栏重叠,工具栏不见了。在 API 低于 30(29、28、27 等)的设备上不会出现此问题。我搜索了 Stackoverflow,但没有找到任何适合我的情况的有效解决方案。

我试过它恢复工具栏并以全屏模式显示应用程序,但设备的状态栏和底部导航栏与应用程序的内容重叠(半透明)。getWindow().setFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS, WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);

我想要的是设备的状态栏和底部导航栏与应用程序的内容不重叠。它们可以出现,也可以消失。

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawerLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <!-- Main content -->
    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- Toolbar -->
        <include
            android:id="@+id/toolbar"
            layout="@layout/toolbar_main"/>

        <FrameLayout
            android:id="@+id/container"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_below="@id/toolbar" />

        <!-- Loading box -->
        <RelativeLayout
            android:id="@+id/boxProgress"
            android:layout_width="@dimen/loading_box_size"
            android:layout_height="@dimen/loading_box_size"
            android:layout_centerInParent="true"
            android:layout_gravity="center"
            android:visibility="gone">

            <FrameLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:layout_centerInParent="true"
                android:alpha="0.8"
                android:background="@drawable/background_round_corner" />

            <ProgressBar
                android:id="@+id/progressBar"
                style="?android:attr/progressBarStyle"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_margin="@dimen/box_margin_medium"
                android:indeterminate="true" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_below="@id/progressBar"
                android:layout_centerHorizontal="true"
                android:text="@string/label_status_loading"
                android:textSize="@dimen/text_size_medium" />

        </RelativeLayout>
    </RelativeLayout>

    <!-- Order drawer (slide from right) -->
    <FrameLayout
        android:id="@+id/drawer"
        android:layout_width="@dimen/drawer_width"
        android:layout_height="match_parent"
        android:layout_gravity="end" />

</androidx.drawerlayout.widget.DrawerLayout>

toolbar_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="36dp"
    android:contentInsetEnd="0dp"
    android:contentInsetLeft="0dp"
    android:contentInsetRight="0dp"
    android:contentInsetStart="0dp"
    android:contentInsetStartWithNavigation="0dp"
    android:fitsSystemWindows="true"
    android:minHeight="36dp"
    android:theme="@style/ToolbarStyle"
    android:layout_marginBottom="@dimen/box_margin_bottom_small"
    app:contentInsetEnd="0dp"
    app:contentInsetLeft="0dp"
    app:contentInsetRight="0dp"
    app:contentInsetStart="0dp"
    app:contentInsetStartWithNavigation="0dp"
    app:popupTheme="@style/AppTheme.PopupOverlay">

    <ImageView
        android:id="@+id/toolbarIndicator"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:scaleType="centerInside"
        android:padding="@dimen/box_padding_small"/>

    <FrameLayout
        android:id="@+id/toolbarContainer"
        android:layout_width="match_parent"
        android:layout_height="36dp" />

</androidx.appcompat.widget.Toolbar>

应用主题

<style name="AppTheme" parent="Theme.AppCompat.NoActionBar">...</style>
动作 状态栏 安卓 全屏

评论

0赞 C.F.G 10/6/2023
尝试在根布局中,android:fitsSystemWindows="false"
0赞 Pandarian Ld 10/9/2023
@C.F.G 我试过了,但它不起作用。但是,我发现我不小心在 MainActivity.kt 中。我删除它,它起作用了!我更新了下面的答案。谢谢你触发我。setDecorFitsSystemWindows(false)

答:

0赞 Pandarian Ld 10/9/2023 #1

我终于明白了!过去,我曾经在 MainActivity.kt 中添加以下代码。onCreate()

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
   this.window.setDecorFitsSystemWindows(false)
}

在我删除它之后,一切都恢复了它应该有的样子。谢谢C.F.G给我关于财产的问题。fitSystemWindows