在RelativeLayout中垂直RecyclerView上方的水平RecyclerView

时间:2016-08-30 16:39:46

标签: android android-recyclerview

我的布局看起来大致如下: Horizontal RecyclerView on top of Vertical RecyclerView

整个粉红色区域是垂直RecyclerView。底部矩形是水平RecyclerView。这两个视图都位于RelativeLayout,其中水平RecyclerView与底部对齐。

我遇到的问题是:当水平RecyclerView没有足够的项目来填充屏幕的宽度时,我希望能够滚动它背后的垂直RecyclerView。因此,如果你看一下图像中的绿色箭头,我想在那种情况下滚动垂直RecyclerView

我一直无法弄清楚如何让这个工作。我尝试设置OnTouchListener,当水平RecyclerView中的项目触摸时返回false。这似乎不起作用。

我还尝试将水平RecyclerView的宽度设置为WRAP_CONTENT,但由于某种原因,RecyclerView没有调整大小。

是否只允许滑动通过水平RecyclerView?水平RecyclerView已禁用垂直滚动,因此我不认为它甚至对垂直滚动做任何事情,它只是吸收它们。

任何建议都将不胜感激。谢谢!

2 个答案:

答案 0 :(得分:1)

对于API< 23.我测试了以下内容:

    final RecyclerView listA = (RecyclerView) findViewById(R.id.ListA);
    listA.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false));
    listA.setAdapter(new CustomViewAdapter(100, R.layout.list_a_item)); //first parameter is item count

    final RecyclerView listB = (RecyclerView) findViewById(R.id.ListB);
    listB.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
    listB.setAdapter(new CustomViewAdapter(4, R.layout.list_b_item)); // first parameter is item count

    listB.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            Rect r = new Rect();
            //get last child view of viewgroup.
            listB.getChildAt(listB.getChildCount()-1).getGlobalVisibleRect(r);
            //do not count margins
            r.offset(-listA.getLeft(), 0);
            if (event.getX() > r.right) {
                //Pass touch event directly to backround recycle view
                listA.onTouchEvent(event);
                return true;
            }
            return false;
        }
    });

结果: enter image description here

答案 1 :(得分:0)

RecycleView wrap_content应该从API 23开始工作。您可以设置wrap_content,以便在没有足够的项目时视图不会填满屏幕。