日常bug收集之ScrollView和RecyclerView的
ScrollView和RecyclerView的爱恨情仇
- 滑动冲突问题
- RecyclerView显示不全问题
一、滑动冲突问题
where:ScrollView和RecyclerView嵌套使用
why:滑动冲突既是ScrollView和RecyclerView本身都具有滑动功能,当两个控件套在一起,系统不知道该执行哪一个滑动事件,导致滑动冲突。
how:有两种思路,禁用RecyclerView的滑动效果或者禁止ScrollView的滑动效果,一般来说禁用ScrollView的滑动效果都是不可能的事,你不能滑动我用你ScrollView干啥。
详细说禁用RecyclerView的滑动,也分两种:
1:RecyclerView自带功能
recyclerView.setNestedScrollingEnabled(false);
添加了你要是觉得还不够丝滑,那么把下面的代码一并加上试试
mLayoutManager.setSmoothScrollbarEnabled(true);
mLayoutManager.setAutoMeasureEnabled(true);
recyclerView.setHasFixedSize(true);
recyclerView.setNestedScrollingEnabled(false);
2:重写LayoutManager的canScrollVertically方法,返回false,禁止LayoutManger滑动及静止了
RecyclerView的滑动了
mLayoutManager = new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false){
@Override
public boolean canScrollVertically() {
return super.canScrollVertically();
}
};
2、RecyclerView显示不全问题
where:ScrollView和RecyclerView嵌套使用
why:具体原因不清楚,网上说是跟新之后的一个bug。
how:两种方法:
1:使用android:fillViewport="true"
,这个属性可以让ScrollView的子控件自行处理宽高,通常不加这个属性,ScrollView的高match_parent一般都不起作用,在这个问题中,这个就能处理RecyclerView不显示的问题了,但有缺陷。
2、第一种的缺陷在于当RecyclerView本身没有沾满全屏的内容之时,使用了fillViewport这个依然会使RecyclerView铺满全屏,如果你的RecyclerView之下还有许多其他内容的话,第一屏基本是看不见的。
第二种方法就是 在RecyclerView之外再嵌套一层RelativeLayout或者LinearLayout
就ok啦,验证只有这两个可以,FrameLayout都不行。
2018年12月28日 16:45:16 持续更新