【发布时间】:2018-11-19 19:05:51
【问题描述】:
所以我正在尝试实现一个 FAB 按钮,这样,当我滚动我的回收站视图并且第一个项目不可见(向上滚动等)时,fab 按钮应该是可见的,否则如果第一个位置是它应该隐藏显示。现在我已经实现了代码,但它根本没有显示 fab 按钮,只是想知道我做错了什么?
我的xml代码如下:
<Linearlayout ....
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v4.widget.SwipeRefreshLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/pullToRefreshLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<android.support.v7.widget.RecyclerView
android:id="@+id/myRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</android.support.v4.widget.SwipeRefreshLayout>
<android.support.design.widget.FloatingActionButton
android:id="@+id/emailFab"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:src="@android:drawable/ic_dialog_email"
app:layout_anchor="@id/myRecyclerView"
android:layout_gravity="bottom|end"
app:layout_behavior="com.example.fab.ScrollAwareFABBehavior"
app:layout_anchorGravity="bottom|end"
/>
</FrameLayout>
</LinearLayout>
我的 Kotlin 代码如下:
val positionView = (myRecyclerView.getLayoutManager() as LinearLayoutManager).findFirstVisibleItemPosition()
myRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() {
override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) {
super.onScrolled(recyclerView, dx, dy)
if (dy >0 && positionView > 0) {
emailFab.show();
} else {
emailFab.hide();
}
}
有什么想法吗?
谢谢!
【问题讨论】:
-
是每个 RecyclerView 孩子中的 FAB 还是活动中的一个 FAB? (例如在 Gmail 应用发送按钮中)
-
r u for real ;) 好吧,您可以为此创建一个简单的界面,并跟踪 recyclerview 的移动,并使用线性布局管理器跟踪第一个孩子是否可见等等,给你一些代码
-
@Domin 让我更新代码以显示我如何在 xml 等中使用 fab。希望这会有所帮助
-
用 xml 更新了代码,就是这样
标签: android kotlin android-recyclerview floating-action-button recyclerview-layout