如何在可能的情况下将 RecyclerView 居中(并且不滚动)?

How to center RecyclerView in the center (and without scrolling) when possible?

这是一个简短的问题:

假设我有一个包含未定义数量项目的 RecyclerView,我应该如何处理它,以便如果有少量项目(全部)可以适合屏幕,它们将居中并且用户将无法滚动?

当然,如果项目太多,屏幕放不下,我希望RecyclerView能够正常显示它们(从开始到可以显示多少,并允许滚动) .

为了理解我的意思,我认为当使用 ScrollView(或 Horizo​​ntalScrollView,如果在水平方向),以及将重力设置为居中的 LinearLayout 时,这种情况是可能的。

我找到了一种复杂的方法来实现它。

主要概念:在代码中动态设置RV的高度

    RecyclerView rv= (RecyclerView) findViewById(R.id.rv);
    rv.setAdapter(new MySlideUpAdapter());
    rv.setLayoutManager(new LinearLayoutManager(this));
    ViewGroup.LayoutParams layoutParams = rv.getLayoutParams();
    layoutParams.height=100;
    rv.setLayoutParams(layoutParams);

您可能需要通过 childcount*childheight 来计算 RV 的高度以获得价格。并且不要忘记将高度与父布局高度进行比较,确保 RV 的高度小于其父布局高度。

这是我的布局

   <RelativeLayout...>
     <android.support.v7.widget.RecyclerView
       android:id="@+id/rv"
       android:layout_centerInParent="true"
       android:layout_width="match_parent"
       <-height will be changed in code, ignore the 50dp-> 
       android:layout_height="50dp">
     </android.support.v7.widget.RecyclerView>
   </RelativeLayout>

好的,我想我找到了一个方法:

首先,我们等待 RecyclerView 完成其布局过程,正如我发现的那样

然后,您需要检查显示了哪些子视图(在您使用的 LayoutManager 中可用),并查看第一个和最后一个。

如果两者都与总项的完全相同,则表示显示了所有需要的视图,因此我可以在 RecyclerView 的两侧添加边距(或在其容器上填充),根据剩下的space。