2016-08-30 2 views
0

У меня есть макет, который выглядит примерно так: Horizontal RecyclerView on top of Vertical RecyclerViewГоризонтальная RecyclerView выше вертикальной RecyclerView в RelativeLayout

Вся розовая зона представляет собой вертикальный RecyclerView. Нижний прямоугольник - горизонтальный RecyclerView. Эти два вида представлены как в RelativeLayout, где горизонталь RecyclerView выровнена по низу.

Проблема, с которой я столкнулся, заключается в следующем: когда на горизонтальном RecyclerView не хватает предметов, чтобы заполнить ширину экрана, я хотел бы иметь возможность прокручивать по вертикали RecyclerView. Поэтому, если вы посмотрите на зеленую стрелку на изображении, я бы хотел прокрутить по вертикали RecyclerView в этой ситуации.

Мне не удалось выяснить, как это работает. Я пробовал установить OnTouchListener, который возвращает false, когда элемент в горизонтальной плоскости RecyclerView is NOT коснулся. Однако это не работает.

Я также попытался установить ширину горизонтальной RecyclerView на WRAP_CONTENT, но RecyclerView не изменил размер по какой-либо причине.

Есть ли хоть что-то, чтобы пройти сквозь горизонтальный проход RecyclerView? Горизонтальный RecyclerView имеет вертикальную прокрутку, поэтому я не думаю, что он даже ничего не делает с вертикальными свитками, он просто поглощает их.

Любые советы будут оценены. Благодаря!

ответ

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

+0

Это работает! Благодаря тонну! –

0

RecycleView wrap_content должен работать с API 23. Вы можете установить wrap_content, чтобы представление не заполняло экран, когда предметов недостаточно.

Смежные вопросы