ListView的EmptyView隐藏BottomNavigationView

时间:2017-01-23 14:19:14

标签: android listview bottomnavigationview

我有一个带有listview的AppCompatActivity,其布局如下

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout
    android:id="@+id/main_content"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">
        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/user_title"
            android:background="@drawable/user_title_color"
            android:textColor="@android:color/white"
            android:textAppearance="@android:style/TextAppearance.Large"/>
    <ListView android:id="@+id/joggings_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:divider="#b5b5b5"
        android:dividerHeight="1dp"
        android:drawSelectorOnTop="false"/>
        <LinearLayout
            android:id="@+id/empty_list"
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical|center">
            <TextView
                android:text="No joggings yet"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" />
            <Button
                android:id="@+id/empty_add_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Add"/>
        </LinearLayout>
    <android.support.design.widget.FloatingActionButton
        android:id="@+id/add_jogging"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@+id/bottom_navigation"
        android:layout_alignParentRight="true"
        android:layout_gravity="end|bottom"
        android:layout_marginBottom="16dp"
        android:layout_marginRight="16dp"
        android:clickable="true"
        android:src="@drawable/ic_plus"
        app:borderWidth="0dp" />
        <android.support.design.widget.BottomNavigationView
            android:id="@+id/bottom_navigation"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:background="@color/colorPrimaryDark"
            android:foregroundTint="@color/colorAccent"
            app:itemTextColor="@color/bottom_navigation_color"
            app:itemIconTint="@color/bottom_navigation_color"
            app:menu="@menu/bottom_navigation_main" />
</LinearLayout>
</android.support.design.widget.CoordinatorLayout>

在我的代码中我有         的 mListView.setEmptyView(findViewById(R.id.empty_list));

为了显示消息并添加&#34;添加&#34;列表为空时按钮。我的问题是当列表为空时,BottomNavigationView被隐藏,用户无法导航到另一个活动 我能想到的一个可能的解决方案是在空布局中添加另一个具有相同项目的BottomNavigationView,但这看起来很难看。

还有其他解决方案吗?

3 个答案:

答案 0 :(得分:1)

将empty_list height设置为wrap_content

答案 1 :(得分:1)

如果您希望它们占据相同的空间,则ListView及其空视图应具有相同的布局属性。在你的情况下,他们都应该

android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"

此外,您应该将FloatingActionButton 放在LinearLayout之外,否则会影响ListView /空视图的大小。它也是CoordinatorLayout的直接子项,否则其默认行为不起作用。

答案 2 :(得分:0)

以下布局运行正常。基本思想是coordinateLayout包含listview和FloatingActionButton以及空视图。 CoordinateLayout包含在一个外部垂直LinearLayout中,它还包含头文本视图和BottomNavigationView

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <TextView
        android:id="@+id/user_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/user_title_color"
        android:textAppearance="@android:style/TextAppearance.Large"
        android:textColor="@android:color/white" />

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/main_content"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1">

        <ListView
            android:id="@+id/joggings_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:divider="#b5b5b5"
            android:dividerHeight="1dp"
            android:drawSelectorOnTop="false" />


        <android.support.design.widget.FloatingActionButton
            android:id="@+id/add_jogging"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_above="@+id/bottom_navigation"
            android:layout_alignParentRight="true"
            android:layout_gravity="end|bottom"
            android:layout_marginBottom="16dp"
            android:layout_marginRight="16dp"
            android:clickable="true"
            android:src="@drawable/ic_plus"
            app:borderWidth="0dp"
            app:layout_anchor="@id/joggings_list"
            app:layout_anchorGravity="bottom|right|end" />


        <LinearLayout
            android:id="@+id/empty_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="center_vertical|center"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="No joggings yet" />

            <Button
                android:id="@+id/empty_add_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Add" />
        </LinearLayout>
    </android.support.design.widget.CoordinatorLayout>

    <android.support.design.widget.BottomNavigationView

        android:id="@+id/bottom_navigation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom"
        android:background="@color/colorPrimaryDark"
        android:foregroundTint="@color/colorAccent"
        app:itemIconTint="@color/bottom_navigation_color"
        app:itemTextColor="@color/bottom_navigation_color"
        app:menu="@menu/bottom_navigation_main" />
</LinearLayout>