BottomNavigationView 从边缘到边缘时永远不会填充系统导航按钮

问题描述 投票:0回答:1

我正在尝试使用顶部导航栏、底部导航栏和抽屉制作边缘到边缘的 UI。

BottomNavigationView 不想填充系统导航按钮。 截图

我尝试将BottomNavigationView单独放在LinearLayout中,但仍然是同样的问题。 系统导航按钮的颜色没有改变,BottomNavigationView 也没有与系统导航按钮重叠。

我尝试在没有 BottomNavigationView 的情况下放置按钮和图像,两者都工作良好并且与系统导航按钮重叠。 但是一旦我添加了 BottomNavigationView,它们就消失了?或者已经被遮盖在BottomNavigationView后面,全部变成了系统导航按钮。

我正在使用 Material Design 3,所以我不知道是否存在问题。

我尝试过将fitsSystemWindows添加到所有内容中,尝试过true / false,从某些内容中删除,将其添加到某些内容中,将BottomNavigationView元素移出抽屉,以及太多其他绝望的尝试。

我想要的只是让它像这样截图

xml:

<?xml version="1.0" encoding="utf-8"?>
<androidx.drawerlayout.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/drawer_layout"
    android:layout_width="fill_parent"
    android:fontFamily="@font/helveticarounded"
    android:layout_height="fill_parent"
    android:fitsSystemWindows="false"
    >

    <LinearLayout
        android:id="@+id/main"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:fitsSystemWindows="false"
        android:fontFamily="@font/helveticarounded"
        android:orientation="vertical"
        tools:context=".MainActivity">

        <com.google.android.material.appbar.AppBarLayout
            android:id="@+id/AppBarLayout"
            android:layout_width="match_parent"
            android:layout_height="80dp"
            android:layout_gravity="top"
            android:fitsSystemWindows="false"
            android:gravity="top"
            android:layout_marginTop="0dp"
            android:fontFamily="@font/helveticarounded">
            <FrameLayout
                android:id="@+id/Frame_toolbar"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_marginStart="10dp"
                android:layout_marginTop="10dp"
                android:layout_marginEnd="10dp"
                android:layout_marginBottom="20dp"
                android:fontFamily="@font/helveticarounded"
                android:fitsSystemWindows="false"
                android:elevation="8dp">

                <com.google.android.material.appbar.MaterialToolbar
                    android:id="@+id/topAppBar"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:textAlignment="center"
                    android:minHeight="?attr/actionBarSize"
                    app:navigationIcon="@drawable/baseline_menu_24"
                    android:layoutDirection="rtl"
                    android:fitsSystemWindows="false"
                    android:fontFamily="@font/helveticarounded"
                    app:title="@string/app_name" />
            </FrameLayout>
        </com.google.android.material.appbar.AppBarLayout>

        <androidx.fragment.app.FragmentContainerView
            android:id="@+id/fragment_container_view"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_gravity="fill"
            android:fitsSystemWindows="false"
            android:layout_weight="1"
            android:layout_marginBottom="0dp"
            android:fontFamily="@font/helveticarounded" />

        <com.google.android.material.bottomnavigation.BottomNavigationView
            android:id="@+id/bottom_navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:fitsSystemWindows="false"
            app:labelVisibilityMode="unlabeled"
            app:menu="@menu/bottom_navigation_menu" />
    </LinearLayout>

    <com.google.android.material.navigation.NavigationView
        android:id="@+id/nav"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="right"
        android:elevation="2dp"
        android:fitsSystemWindows="false"
        android:layoutDirection="rtl"
        app:layout_constraintStart_toStartOf="parent"
        app:menu="@menu/navigation_drawer" />



</androidx.drawerlayout.widget.DrawerLayout>

java:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        EdgeToEdge.enable(this);

        super.onCreate(savedInstanceState);
       
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
       
        setContentView(R.layout.main);


    }
java android android-navigation-bar
1个回答
0
投票

我检查了BottomNavigationView.java的源代码。

在BottomNavigationView.applyWindowInsets()中,工程师通过在底部添加padding来避免与系统导航栏重叠的问题。

https://github.com/material-components/material-components-android/blob/master/lib/java/com/google/android/material/bottomnavigation/BottomNavigationView.java#L142

BottomNavigationView组件显示在系统导航栏上方,看起来很符合MaterialUI设计要求。

© www.soinside.com 2019 - 2024. All rights reserved.