将 FloatingActionButton 作为 FooterView 添加到 ListView
Adding a FloatingActionButton as a FooterView to a ListView
我想在 ListView 下添加一个 FloatingActionButton(这样按钮总是 ListView 的最后一项)。
我找到了一个方法,它可以做到这一点,叫做 addFooterView。
但是,当我尝试添加 FAB 时,出现错误:
android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
我的 FAB 的参数似乎无法转换为 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);
您不能将视图添加为已有父视图的页脚视图。
您应该在代码中创建 FloatingActionButton
,然后将其添加为页脚视图。
但正如其他人所说,UX-wise 最好将其显示在 ListView
之上。
你可以用在有这个效果的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
) 到做到这一点的标准方法。
我想在 ListView 下添加一个 FloatingActionButton(这样按钮总是 ListView 的最后一项)。 我找到了一个方法,它可以做到这一点,叫做 addFooterView。 但是,当我尝试添加 FAB 时,出现错误:
android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
我的 FAB 的参数似乎无法转换为 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);
您不能将视图添加为已有父视图的页脚视图。
您应该在代码中创建 FloatingActionButton
,然后将其添加为页脚视图。
但正如其他人所说,UX-wise 最好将其显示在 ListView
之上。
你可以用在有这个效果的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
) 到做到这一点的标准方法。