我试图实现一个布局,其中包含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完全相同的结果。


当前回答

另一种解决这个问题的方法是在ScrollView中使用ConstraintLayout:

<ScrollView>
  <ConstraintLayout> (this is the only child of ScrollView)
    <...Some Views...>
    <RecyclerView> (layout_height=wrap_content)
    <...Some Other Views...>

但我仍然会坚持使用杨培勇提出的androidx.core.widget.NestedScrollView方法。

其他回答

对于那些仅仅为了设计目的而尝试这样做的人,请离开它。重新设计你的应用,只留下RecyclerView。这将是比任何硬代码更好的解决方案。

如果RecyclerView只显示ScrollView中的一行。你只需要设置你的行高度android:layout_height="wrap_content"。

尽管建议

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

这是一个很好的建议,但是如果你在回收器视图上设置了一个固定的高度,它应该可以正常工作。

如果你知道适配器项布局的高度,你就可以计算出RecyclerView的高度。

int viewHeight = adapterItemSize * adapterData.size();
recyclerView.getLayoutParams().height = viewHeight;

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

Android支持库23.2

使用NestedScrollView代替ScrollView

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

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