我试图实现一个布局,其中包含RecyclerView和ScrollView在相同的布局。

布局模板:

<RelativeLayout>
    <ScrollView android:id="@+id/myScrollView">

       <unrelated data>...</unrealated data>

       <android.support.v7.widget.RecyclerView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:id="@+id/my_recycler_view" />
    </ScrollView>   
</RelativeLayout>

问题:我可以滚动到ScrollView的最后一个元素。

我尝试过的事情:

在ScrollView里面的卡片视图(现在ScrollView包含RecyclerView) -可以看到卡片直到RecyclerView。 最初的想法是使用RecyclerView来实现这个ViewGroup而不是ScrollView,其中一个视图类型是CardView,但我得到了与ScrollView完全相同的结果。


当前回答

新的Android支持库23.2解决了这个问题,你现在可以将wrap_content设置为RecyclerView的高度并正确工作。

Android支持库23.2

其他回答

这招很管用:

recyclerView.setNestedScrollingEnabled(false);

使用NestedScrollView代替ScrollView

更多信息请查阅NestedScrollView参考文档。

添加recyclerView.setNestedScrollingEnabled(false);到您的RecyclerView

我知道我迟到了,但即使谷歌已经在android.support.v7.widget.RecyclerView上进行了修复,问题仍然存在

我现在得到的问题是RecyclerView与layout_height=wrap_content不采取所有项目的高度问题内ScrollView,只发生在棉花糖和牛轧糖+ (API 23, 24, 25)版本。 (更新:将ScrollView替换为android.support.v4.widget。NestedScrollView适用于所有版本。我不知何故错过了测试已接受的解决方案。在我的github项目中添加了这个演示。)

在尝试了不同的方法之后,我找到了解决这个问题的方法。

以下是我的布局结构:

<ScrollView>
  <LinearLayout> (vertical - this is the only child of scrollview)
     <SomeViews>
     <RecyclerView> (layout_height=wrap_content)
     <SomeOtherViews>

解决方法是用RelativeLayout包装RecyclerView。不要问我是怎么找到这个变通办法的!!¯\_()_/¯

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:descendantFocusability="blocksDescendants">

    <android.support.v7.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

</RelativeLayout>

完整的示例可在GitHub项目- https://github.com/amardeshbd/android-recycler-view-wrap-content

下面是一个演示截图,展示了修复的操作:

更新: 这个答案现在已经过时了,因为有像NestedScrollView和RecyclerView这样的小部件支持嵌套滚动。

永远不要把一个可滚动视图放在另一个可滚动视图中!

我建议你让你的主布局回收者视图,并把你的视图作为项目回收者视图。

看一下这个例子,它展示了如何在回收视图适配器中使用多个视图。 链接到示例

如果你把RecyclerView放在NestedScrollView里面,并启用RecyclerView . setnestedscrollingenabled (false);,滚动将工作得很好。 然而,有一个问题

RecyclerView不回收

例如,你的RecyclerView(在NestedScrollView或ScrollView内)有100个条目。 当Activity启动时,将创建100个项目(同时调用100个项目的onCreateViewHolder和onBindViewHolder)。 例如,对于每个项目,你将加载一个大图像从API =>活动创建-> 100图像将加载。 它使启动活动缓慢和滞后。 可能的解决方案: -考虑使用多重类型的RecyclerView。

然而,如果在你的情况下,只有几个项目在RecyclerView和回收或不回收不会影响性能很多,你可以在ScrollView内使用RecyclerView简单