问题描述:
请仔细看gif图 刚开始的地方是Banner
自动向上滚动到的位置是一个ViewPager
前言
这种问题用图片真的不好描述,如果有同样的问题 请仔细看gif图
说明!
仔细看 当我滑动到每日精选的上面一点点时候 这时recyclerview会触发自动向上滚动。如果没看清楚 请仔细再看一次。
因为不影响任何功能 这个算是小问题 之前项目上线 我也没太在意,但是后来经过客户反应
说这个对用户体验不太好 希望修改!于是,我就开始排查问题:
最初我担心可能是用的第三方框架问题,但是回头一想,项目其他地方也用了同一个第三方控件,也没有问题啊
后来想到 可能是scroll或者smothscroll引起的问题 看了很多博文,也试着调整了代码 但是好像没有效果。
我不甘心啊,遇到了问题。怎么都解决不了,后来无意间看到了一篇关于焦点争夺的问题,引起了我的注意。
于是我查看了API 找到了这样的说明:
android:descendantFocusability Defines the relationship between the ViewGroup and its descendants when looking for a View to take focus. Must be one of the following constant values.
在寻找要聚焦的视图时,定义ViewGroup及其后代之间的关系。
必须是下列常数之一:
该属性是当一个为view获取焦点时,定义viewGroup和其子控件两者之间的关系。
属性的值有三种:
-
beforeDescendants:viewgroup会优先其子类控件而获取到焦点
-
afterDescendants:viewgroup只有当其子类控件不需要获取焦点时才获取焦点
-
blocksDescendants:viewgroup会覆盖子类控件而直接获得焦点
根据上面的说明:
我用到的是第三种方法,即在Item布局的根布局加android:descendantFocusability="blocksDescendants"”
的属性。
再加上去除RecyclerView滑动边缘阴影效果 设置android:overScrollMode="never"
完美解决滚动问题。
XML根布局
<android.support.constraint.ConstraintLayout
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:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:descendantFocusability="blocksDescendants" <!-- 覆盖子类控件而直接获得焦点 -->
tools:context="com.jxty.app.garden.main.HomeFragment">
recyclerView布局
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#eeeeee"
android:overScrollMode="never" /> <!-- 去边缘阴影效果 -->
好了因焦点冲突产生的滑动问题就此解决!~
与君共勉
我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天