美文网首页
日常bug收集之ScrollView和RecyclerView的

日常bug收集之ScrollView和RecyclerView的

作者: AndyDufres_0e9c | 来源:发表于2018-12-10 13:48 被阅读0次

    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 持续更新

    相关文章

      网友评论

          本文标题:日常bug收集之ScrollView和RecyclerView的

          本文链接:https://www.haomeiwen.com/subject/celrhqtx.html