FloatingActionButton+RecycleView联动,并解决只隐藏不出现的bug
来源:互联网 发布:naza飞控调参软件下载 编辑:程序博客网 时间:2024/06/05 17:47
实现效果为向下滑动FAB消失,向上滑动FAB出现,点击FAB自动跳转到Recycleview顶部。
<android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.mark_pc.yixuedemo.fragment.HomeFragment"> <com.jcodecraeer.xrecyclerview.XRecyclerView android:id="@+id/xrv_classify" android:layout_width="match_parent" android:layout_height="match_parent"> </com.jcodecraeer.xrecyclerview.XRecyclerView> <android.support.design.widget.FloatingActionButton android:id="@+id/fab_mian" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="bottom|end" android:layout_marginBottom="20dp" android:layout_marginRight="15dp" android:src="@drawable/icon_wancheng_me" android:visibility="invisible" app:backgroundTint="#efefef" app:rippleColor="#33728dff" app:layout_behavior="com.example.mark_pc.yixuedemo.view.ScrollAwareFABBehaviorDefault"/></android.support.design.widget.CoordinatorLayout>
RecycleView是通过通知CoordinatorLayout来联动FAB的,所以父布局必须用到CoordinatorLayout
app:layout_behavior="com.example.mark_pc.yixuedemo.view.ScrollAwareFABBehaviorDefault"
然后自定义一个behavior
package com.example.mark_pc.yixuedemo.view;import android.content.Context;import android.support.design.widget.CoordinatorLayout;import android.support.design.widget.FloatingActionButton;import android.support.v4.view.ViewCompat;import android.util.AttributeSet;import android.view.View;/** * Created by Mark-PC on 2017/6/6. */public class ScrollAwareFABBehaviorDefault extends FloatingActionButton.Behavior { public ScrollAwareFABBehaviorDefault(Context context, AttributeSet attrs) { super(); } @Override public boolean onStartNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child, final View directTargetChild, final View target, final int nestedScrollAxes) {// Ensure we react to vertical scrolling return nestedScrollAxes == ViewCompat.SCROLL_AXIS_VERTICAL || super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes); } public void onNestedScroll(final CoordinatorLayout coordinatorLayout, final FloatingActionButton child, final View target, final int dxConsumed, final int dyConsumed, final int dxUnconsumed, final int dyUnconsumed) { super.onNestedScroll(coordinatorLayout, child, target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed); if (dyConsumed > 0 && child.getVisibility() == View.VISIBLE) { child.hide(); } else if (dyConsumed < 0 && child.getVisibility() != View.VISIBLE) { child.show(); } }}
再给FAB设置一个点击事件,这样就实现最终效果了
case R.id.fab_mian: //点击跳转到顶部,并隐藏FAB xrv_classify.smoothScrollToPosition(0); fab_mian.setVisibility(View.INVISIBLE); break;
有时候会出现只能隐藏,不能出现的bug,主要是因为SDK的版本问题,25.1.1及以上都不行,把design的版本换成25.0.1就可以了
还有一种说法,是因为在25SDK中CoordinatorLayout的onNestedScroll()这个方法中for循环里面添加了一个判断
if (view.getVisibility() == GONE) {
// If the child is GONE, skip...
continue;
}
如果直接使用hide()方法或者直接设置View的状态为GONE的画,都会是该条件判断成立,从而跳出for循环,后面Behavior就没法响应事件了
阅读全文
0 0
- FloatingActionButton+RecycleView联动,并解决只隐藏不出现的bug
- 关于解决自定义FloatingActionButton滑动行为(Behavior)只隐藏不出现的问题
- FloatingActionButton属性、用法,以及解析并解决sdk25以上只隐藏不显示的问题
- 【Material Design】自定义FloatingActionButton滑动行为只隐藏不出现的问题
- 【Android】(已更新解决方案)更新SDK版本(25)后,自定义FloatingActionButton的Behavior(跟随列表滑动显示隐藏)只隐藏不出现的问题
- FloatingActionButton自定义滑动动画,只隐藏不显示解决方案
- 解决NestedScrollView嵌套RecycleView的bug
- 解决NestedScrollView嵌套RecycleView的bug
- 记录RecycleView的数据错乱BUG解决
- Recycleview嵌套Recycleview时出现的一个问题-待解决
- ubuntu10.04 panel自动隐藏后不出现的解决
- 解决一个只在调试运行状态下才出现的bug
- NestedScrollView嵌套RecycleView或RecycleView嵌套RecycleView的bug
- ANDROID Recycleview notifyDataSetChanged()方法调用出现IllegalStateException 问题的解决
- 解决ScrollView嵌套recycleView高度不匹配的问题
- FloatingActionButton滚动时的显示与隐藏
- RecycleView遇到的奇葩bug
- iOS:省市联动的实现以及BUG的解决
- 业界良心? 谷歌宣布Chrome将自带广告拦截功能
- [P1052]过河
- 实战hadoop海量数据处理系列 01:数据导入篇
- Spark2.8.0源代码导入,XMPP即时通讯Openfire和Spark源代码导入
- 剑指Offer-30
- FloatingActionButton+RecycleView联动,并解决只隐藏不出现的bug
- 编辑距离(dp)
- [LeetCode] Is Subsequence
- 插入排序
- 最详细的openfire3.7.1 插件开发环境搭建
- Oracle日常性能查看
- Android 开发之 App 启动时间统计
- 关于框架和模式的学习,重点为MyBatis
- jQuery