如何修复Android中滚动视图下方的底部导航栏?

时间:2019-08-27 17:29:18

标签: android android-layout bottomnavigationview

我有一个活动,在一个嵌套滚动视图中有多个卡片视图。我想在底部固定导航栏。但是,每当我尝试在可滚动内容下方放置一个栏时,内容也会覆盖该栏。我尝试将其包装在约束布局视图中,但这也不起作用。这是我的布局文件。

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_height="match_parent"
    android:layout_width="match_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">


        <androidx.core.widget.NestedScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:id="@+id/scroll_view">

            <LinearLayout
                android:orientation="vertical"
                android:layout_height="match_parent"
                android:layout_width="match_parent">

                <androidx.cardview.widget.CardView
                    xmlns:card_view="http://schemas.android.com/apk/res-auto"
                    android:id="@+id/card_view"
                    android:layout_width="match_parent"
                    android:layout_height="199dp"
                    android:layout_gravity="center"
                    card_view:cardCornerRadius="4dp"
                    android:layout_marginTop="5dp"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp">

                    <TextView

                        android:id="@+id/info_text"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                </androidx.cardview.widget.CardView>

                <androidx.cardview.widget.CardView
                    xmlns:card_view="http://schemas.android.com/apk/res-auto"

                    android:id="@+id/card_view1"
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:layout_gravity="center"
                    card_view:cardCornerRadius="5dp"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp">

                    <TextView

                        android:id="@+id/info_text1"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                </androidx.cardview.widget.CardView>
                <androidx.cardview.widget.CardView
                    xmlns:card_view="http://schemas.android.com/apk/res-auto"

                    android:id="@+id/card_view2"
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:layout_gravity="center"
                    card_view:cardCornerRadius="5dp"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp">

                    <TextView

                        android:id="@+id/info_text2"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                </androidx.cardview.widget.CardView>

                <androidx.cardview.widget.CardView
                    xmlns:card_view="http://schemas.android.com/apk/res-auto"

                    android:id="@+id/card_view3"
                    android:layout_width="match_parent"
                    android:layout_height="200dp"
                    android:layout_gravity="center"
                    card_view:cardCornerRadius="5dp"
                    android:layout_marginBottom="5dp"
                    android:layout_marginLeft="5dp"
                    android:layout_marginRight="5dp">

                    <TextView

                        android:id="@+id/info_text3"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content" />

                </androidx.cardview.widget.CardView>

            </LinearLayout>


        </androidx.core.widget.NestedScrollView>


    <com.google.android.material.bottomnavigation.BottomNavigationView
        android:id="@+id/nav_view"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="0dp"
        android:layout_marginEnd="0dp"
        android:layout_gravity="bottom"
        android:background="?android:attr/windowBackground"
        app:layout_constraintTop_toBottomOf="@id/scroll_view"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:menu="@menu/bottom_nav_menu" />

</androidx.constraintlayout.widget.ConstraintLayout>

任何帮助都将受到赞赏。

2 个答案:

答案 0 :(得分:1)

您的NestedScrollView有android:layout_height="match_parent",我认为这是问题所在。您应该将BottomNavigationView放到底部,并在父顶部和BottomNavigationView之间限制NestedScrollView

答案 1 :(得分:1)

您的BottomNavigationView缺少底部约束。向其添加以下行以使其起作用:

  

app:layout_constraintBottom_toBottomOf =“父母”

潜在的问题是您的NestedScrollView具有android:layout_height="match_parent",这会占用整个屏幕,因为ConstraintLayout也具有android:layout_height="match_parent"

通常应避免对match_parent中的视图使用ConstraintLayouts

  

注意:不能将match_parent用于ConstraintLayout中的任何视图。而是使用“匹配约束”(0dp)。

请参阅Android文档here