2016-08-30 44 views
0

水平RecyclerView我有一個佈局,看起來大致是這樣的: Horizontal RecyclerView on top of Vertical RecyclerView上述垂直RecyclerView中的RelativeLayout

整個粉色區域是垂直RecyclerView。底部的矩形是水平的RecyclerView。這兩個視圖都在RelativeLayout中,其中水平RecyclerView與底部對齊。

我遇到的問題是:當水平的RecyclerView沒有足夠的項目來填充屏幕的寬度時,我希望能夠在其後面滾動垂直RecyclerView。所以如果你看圖中的綠色箭頭,我想在這種情況下滾動垂直RecyclerView

我一直無法弄清楚如何讓這個工作。我試圖設置一個OnTouchListener,當水平RecyclerView中的項目是不是時,返回false。這似乎並不奏效。

我也嘗試將橫向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,以便在沒有足夠的項目時視圖不會填滿屏幕。

相關問題