2D-список с RecyclerView в HorizontalScrollView

Я пытаюсь создать представление, которое позволит пользователю прокручивать подобную Excel структуру как по горизонтали, так и по вертикали. Моя первоначальная идея состояла в том, чтобы перевести RecyclerView (с LinearManager) в HorizontalScrollView. Но, похоже, это не работает.

Вот мой код:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.Toolbar android:id="@+id/gameplay_Toolbar" android:layout_width="match_parent" android:layout_height="56dp" android:background="@color/accent" app:title="@string/gameplay_score_toolbar" app:titleMarginStart="48dp" app:titleTextAppearance="@style/toolbar_title" /> <HorizontalScrollView android:id="@+id/gameplay_hotizontalScroll_ScrollView" android:layout_below="@+id/gameplay_Toolbar" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_marginTop="5dp" android:layout_marginLeft="5dp" android:fillViewport="true" > <android.support.v7.widget.RecyclerView android:id="@+id/gameplay_gameContents_RecyclerView" android:layout_width="fill_parent" android:layout_height="match_parent"/> </HorizontalScrollView> </RelativeLayout> 

Прямо сейчас он позволяет прокручивать Recycler, HorizontalScrollView, похоже, действует как обычный FrameLayout (поскольку представления внутри Recycler обрезаются до края).

Я думаю, что может быть уместным, чтобы взгляды, которые я вводил в Recycler, имели фиксированный размер.

Любые советы о том, как заставить эту концепцию работать?

[Решено]

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

 public class SmartRecyclerView extends RecyclerView { public int computedWidth = <needs to be set from outside> public SmartRecyclerView(Context context) { super(context); } public SmartRecyclerView(Context context, AttributeSet attrs) { super(context, attrs); } public SmartRecyclerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } @Override public boolean canScrollHorizontally(int direction) { return false; } @Override public int getMinimumWidth() { return computedWidth; } @Override protected void onMeasure(int widthSpec, int heightSpec) { super.onMeasure(widthSpec, heightSpec); setMeasuredDimension(computedWidth, getMeasuredHeight()); } @Override protected int getSuggestedMinimumWidth() { return computedWidth; } } 

А затем просто:

 HorizontalScrollView myScroll = ... SmartRecyclerView recyclerView = new SmartRecyclerView(...) ... recyclerView.computedWidth = myNeededWidth; myScroll.addView(recyclerView); 

И это РАБОТАЕТ! Счастливое кодирование …

Пример рабочего кода: https://dl.dropboxusercontent.com/u/79978438/RecyclerView_ScrollView.zip