アップデート1
Android Support Library 23.2.0以降setAutoMeasureEnabled(true)、LayoutManagerのメソッドが追加されました。RecyclerViewでコンテンツをラップし、チャームのように機能します。
http://android-developers.blogspot.ru/2016/02/android-support-library-232.html
したがって、次のように追加するだけです。
    LayoutManager layoutManager = new LinearLayoutManager(this);
    layoutManager.setAutoMeasureEnabled(true);
    recyclerView.setLayoutManager(layoutManager);
    recyclerView.setNestedScrollingEnabled(false);
アップデート2
27.1.0 setAutoMeasureEnabledは非推奨であるため、オーバーライドされたメソッドを使用してLayoutManagerのカスタム実装を提供する必要がありますisAutoMeasureEnabled()
しかし、RecyclerViewを何度も使用した後は、ラッピングモードで使用しないことを強くお勧めします。これは、意図したものではないためです。複数のアイテムのタイプを持つ通常の単一のRecyclerViewを使用して、レイアウト全体をリファクタリングしてみてください。または、最後の手段として以下で説明するLinearLayoutのアプローチを使用します
古い回答(非推奨)
RecyclerView内部で使用できますNestedScrollView。まず、独自のカスタムを実装する必要LinearLayoutManagerがありますRecyclerView。これにより、コンテンツがラップされます。例えば:
public class WrappingLinearLayoutManager extends LinearLayoutManager
{
    public WrappingLinearLayoutManager(Context context) {
        super(context);
    }
    private int[] mMeasuredDimension = new int[2];
    @Override
    public boolean canScrollVertically() {
        return false;
    }
    @Override
    public void onMeasure(RecyclerView.Recycler recycler, RecyclerView.State state,
            int widthSpec, int heightSpec) {
        final int widthMode = View.MeasureSpec.getMode(widthSpec);
        final int heightMode = View.MeasureSpec.getMode(heightSpec);
        final int widthSize = View.MeasureSpec.getSize(widthSpec);
        final int heightSize = View.MeasureSpec.getSize(heightSpec);
        int width = 0;
        int height = 0;
        for (int i = 0; i < getItemCount(); i++) {
            if (getOrientation() == HORIZONTAL) {
                measureScrapChild(recycler, i,
                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                        heightSpec,
                        mMeasuredDimension);
                width = width + mMeasuredDimension[0];
                if (i == 0) {
                    height = mMeasuredDimension[1];
                }
            } else {
                measureScrapChild(recycler, i,
                        widthSpec,
                        View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED),
                        mMeasuredDimension);
                height = height + mMeasuredDimension[1];
                if (i == 0) {
                    width = mMeasuredDimension[0];
                }
            }
        }
        switch (widthMode) {
            case View.MeasureSpec.EXACTLY:
                width = widthSize;
            case View.MeasureSpec.AT_MOST:
            case View.MeasureSpec.UNSPECIFIED:
        }
        switch (heightMode) {
            case View.MeasureSpec.EXACTLY:
                height = heightSize;
            case View.MeasureSpec.AT_MOST:
            case View.MeasureSpec.UNSPECIFIED:
        }
        setMeasuredDimension(width, height);
    }
    private void measureScrapChild(RecyclerView.Recycler recycler, int position, int widthSpec,
            int heightSpec, int[] measuredDimension) {
        View view = recycler.getViewForPosition(position);
        if (view.getVisibility() == View.GONE) {
            measuredDimension[0] = 0;
            measuredDimension[1] = 0;
            return;
        }
        // For adding Item Decor Insets to view
        super.measureChildWithMargins(view, 0, 0);
        RecyclerView.LayoutParams p = (RecyclerView.LayoutParams) view.getLayoutParams();
        int childWidthSpec = ViewGroup.getChildMeasureSpec(
                widthSpec,
                getPaddingLeft() + getPaddingRight() + getDecoratedLeft(view) + getDecoratedRight(view),
                p.width);
        int childHeightSpec = ViewGroup.getChildMeasureSpec(
                heightSpec,
                getPaddingTop() + getPaddingBottom() + getDecoratedTop(view) + getDecoratedBottom(view),
                p.height);
        view.measure(childWidthSpec, childHeightSpec);
        // Get decorated measurements
        measuredDimension[0] = getDecoratedMeasuredWidth(view) + p.leftMargin + p.rightMargin;
        measuredDimension[1] = getDecoratedMeasuredHeight(view) + p.bottomMargin + p.topMargin;
        recycler.recycleView(view);
    }
}
その後、これLayoutManagerをあなたのために使用してくださいRecyclerView
recyclerView.setLayoutManager(new WrappingLinearLayoutManager(getContext()));
ただし、次の2つのメソッドも呼び出す必要があります。
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setHasFixedSize(false);
ここでのsetNestedScrollingEnabled(false)スクロールを無効にしてRecyclerView、からのスクロールイベントをインターセプトしないようにしNestedScrollViewます。そしてsetHasFixedSize(false)、アダプターの内容を変更すると、RecyclerView
重要な注意:このソリューションは、場合によっては少しバグがあり、パフォーマンスに問題があります。そのため、リストビューのRecyclerViewカスタムLinearLayoutベースの実装を使用することをお勧めします。アダプターのアナログを作成して作成します。ListViewまたはのように振る舞うRecyclerView