Android6.0 ScrollView与RecyclerView滑动冲突的问题

原创 2017年04月20日 10:59:10

前记:我有个这样的需求,在一个LinearLayout中Vertical展示俩个不同的recycleview,但是要求俩个recycleview都全部展示出来;

在Android5.0的系统中,我的做法是,只要在LinearLayout外面加一个ScrollView我的问题就解决了。在Android5.0的机器上运行,效果确实是我要的。代码如下:

    <ScrollView
        android:id="@+id/sv_search_result"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="@dimen/size_10"
        android:scrollbars="none">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">
                <com.hp.appquestion.view.CustomRecyclerView
                    android:id="@+id/rv_video_list"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
                <com.hp.appquestion.view.CustomRecyclerView
                    android:id="@+id/rv_exam_list"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
        </LinearLayout>
    </ScrollView>

但这段代码放到Android6.0系统的机器上面跑,我发现第二个RecyclerView的内容没有铺开展示,第二个RecyclerView可以滑动。而且发现还有个问题,即使ScrollView中只放一个RecyclerView,全部铺开展示,滑动起来的时候有明显的卡顿感。

网上查了资料,说在Android6.0系统中,如果RecyclerView与RecyclerView一起使用,确实存在俩者滑动冲突的问题。滑动冲突需要自己想办法解决。

结合网上的资料,我自己的解决办法是。

1,先解决第一个recyclerview都能完整显示的问题

在俩个recyclerview外面都包裹一个相对布局RelativeLayout,一定是俩个recyclerview都要包裹。我试着只包裹下底部的一个,发现当底部的数据增多时,会出现异常。

代码如下:

    <ScrollView
        android:id="@+id/sv_search_result"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_marginTop="@dimen/size_10"
        android:scrollbars="none">
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <com.hp.appquestion.view.CustomRecyclerView
                    android:id="@+id/rv_video_list"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
            </RelativeLayout>

            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content">

                <com.hp.appquestion.view.CustomRecyclerView
                    android:id="@+id/rv_exam_list"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content" />
            </RelativeLayout>
        </LinearLayout>
    </ScrollView>

上面就解决了Android6.0上俩个recyclerview都能完整显示的问题

2,解决滑动recyclerView时有卡顿的问题

原因还是滑动冲突的问题,我的解决方案是,重写LinearLayoutManager,设置让其不可滑动,外部滑动靠ScrollView,这样就解决了滑动时卡顿的问题
代码如下:

    public class ScrollLinearLayoutManager extends LinearLayoutManager {
        private boolean isScrollEnabled = true;

        public ScrollLinearLayoutManager(Context context) {
            super(context);
        }

        public ScrollLinearLayoutManager(Context context, int orientation, boolean reverseLayout) {
            super(context, orientation, reverseLayout);
        }

        public ScrollLinearLayoutManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
            super(context, attrs, defStyleAttr, defStyleRes);
        }

        public void setScrollEnabled(boolean flag) {
            this.isScrollEnabled = flag;
        }

        @Override
        public boolean canScrollVertically() {
            return isScrollEnabled && super.canScrollVertically();
        }
    }

使用:

    ScrollLinearLayoutManager scrollLinearLayoutManager = new ScrollLinearLayoutManager(this);
    scrollLinearLayoutManager.setScrollEnabled(false);
    mRecyclerView.setLayoutManager(scrollLinearLayoutManager);

这样,俩个问题就都解决了!

解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题

我们先看一个效果,问题说的就是中间的Grid效果在Scrollview 嵌套recyclerview显示问题,在Android Api 24是好的,不过在5,1,1版本(api 22)缺出现了问题最近...
  • xiangzhihong8
  • xiangzhihong8
  • 2016年10月29日 18:18
  • 3865

【Android】ScrollView嵌套RecyclerView,RecyclerView总是把它上面的控件顶出页面

ScrollView嵌套RecyclerView,当我离开当前页面,然后又回来时,RecyclerView就会把它上边的控件都挤出页面,它显示在页面最上边。原因应该是RecyclerView抢了焦点,...
  • yingpaixiaochuan
  • yingpaixiaochuan
  • 2016年11月16日 19:27
  • 6340

Scrollview 嵌套 RecyclerView 及在Android 5.1版本滑动时 惯性消失问题

scrollview 嵌套recyclerview 时,recyclerview不显示,这就需要我们自己计算recyclerview的高度,比如: ViewGroup.LayoutParams mPa...
  • fangchao3652
  • fangchao3652
  • 2015年07月16日 17:24
  • 13029

【Android】ListView、RecyclerView、ScrollView里嵌套ListView 相对优雅的解决方案:NestFullListView

一 背景概述:ScrollView里嵌套ListView,一直是Android开发者(反正至少是我们组)最讨厌的设计之一,完美打破ListView(RecyclerView)的复用机制,成功的将Nat...
  • zxt0601
  • zxt0601
  • 2016年09月10日 21:24
  • 17671

关于Scrollview嵌套RecyclerView高度显示不全

前言做 Android开发我们经常会遇到这种ScrollView嵌套Listview或者 嵌套RecyclerView的需求,当我们搜索解决方案时经常会遇到这句话you should never pu...
  • dreamsever
  • dreamsever
  • 2017年02月27日 16:09
  • 3076

Android开发中Scrollview嵌套recyclerview时,recyclerview不显示数据

这个问题和ScrollView嵌套ListView是一个起因,是因为在scrollview嵌套的空间中无法正确计算recyclerview的高度造成的。 解决办法:重写recyclerview的布局...
  • u012758803
  • u012758803
  • 2016年10月13日 20:22
  • 1700

Android Scrollview嵌套RecyclerView导致滑动卡顿问题解决

一个比较长的界面一般都是Scrollview嵌套RecyclerView来解决.不过这样的UI并不是我们开发人员想看到的,实际上嵌套之后.因为Scrollview和RecyclerView都是滑动控件...
  • u010399316
  • u010399316
  • 2016年10月08日 10:14
  • 4272

scrollView嵌套recyclerView 显示不全(已解决)

毕竟recycleView 是新的控件,所以在最近的项目中我尽可能 的用recyclerView而不使用ListView,所以今天就碰见了一个跟listView的一个通用的问题,就是嵌套之后显示不全,...
  • p1522780457
  • p1522780457
  • 2017年04月18日 14:59
  • 4449

Android 6.0 scrollview 嵌套recyclerview不能全部显示,高度不正常的问题

引用:https://my.oschina.net/caomenglong/blog/747197     在android 4 / 5 版本中 scrollview 包含了一个recyclervie...
  • ShareUs
  • ShareUs
  • 2016年12月23日 15:27
  • 2999

NestedScrollview 嵌套 RecyclerView 滑动卡顿,ScrollView 嵌套 RecyclerView 冲突 解决方案

用 ScrollView 嵌套 RecyclerView 的时候会出现 冲突的情况,这个时候,很多人都知道要使用 NestedScrollView来替换 ScrollView... 但是,当Nest...
  • qq_16624353
  • qq_16624353
  • 2017年06月26日 18:59
  • 2292
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android6.0 ScrollView与RecyclerView滑动冲突的问题
举报原因:
原因补充:

(最多只允许输入30个字)