将FloatingActionButton作为FooterView添加到ListView

时间:2016-01-20 13:03:41

标签: android listview android-design-library floating-action-button

我想在ListView下添加一个FloatingActionButton(这样该按钮始终是ListView的最后一项)。 我找到了一个方法,可以做到这个叫做addFooterView。 当我尝试添加FAB时,我收到一个错误:

android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams

似乎我的FAB的Params不能转换为RelativeLayout参数。 我怎么解决这个问题?或者有另一种方法可以达到这种效果吗?

我的(相关)XML:

<RelativeLayout 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:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
tools:context="com.MainActivity">

<android.support.design.widget.AppBarLayout
    android:id="@+id/toolbarContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:theme="@style/AppTheme.AppBarOverlay">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:popupTheme="@style/AppTheme.PopupOverlay" />

</android.support.design.widget.AppBarLayout>


<ListView
    android:id="@+id/container"
    android:layout_below="@id/toolbarContainer"
    android:layout_width="match_parent"
    android:layout_height="wrap_content">
</ListView>


<android.support.design.widget.FloatingActionButton
    android:id="@+id/fab"
    android:layout_below="@id/container"
    android:layout_centerHorizontal="true"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_margin="@dimen/fab_margin"
    android:src="@android:drawable/ic_menu_add" />

(相关)部分代码:

ListView container = (ListView)findViewById(R.id.container);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);

container.addFooterView(fab);

2 个答案:

答案 0 :(得分:1)

您无法将视图添加为已有父级的页脚视图。 您应该在代码中创建FloatingActionButton,然后将其添加为页脚视图。

但正如其他人所说,在UX方面,最好将其显示在ListView之上。

答案 1 :(得分:1)

您可以在具有此效果的CoordinatorLayout上使用它。

由于您使用的AppbarLayout只是用于CoordinatorLayout

<强>实施

<CoordinatorLayout>
    <AppbarLayout/>
    <scrollableView/>
    <FloatingActionButton/>
</CoordinatorLayout>

示例:

<android.support.design.widget.FloatingActionButton
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_margin="@dimen/activity_horizontal_margin"
        android:src="@drawable/ic_comment_24dp"
        app:layout_anchor="@id/main.appbar"
        app:layout_anchorGravity="bottom|right|end"
        />

这是从(MaterialDesign)开始的标准方法。

此外,您可以查看:http://saulmm.github.io/mastering-coordinator/