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

时间:2015-12-16 14:29:45

标签: android android-recyclerview centering

这是一个简短的问题:

假设我有一个具有未定义项目数量的RecyclerView,我应该怎么做,这样如果有少量项目(全部)可以适合屏幕,它们将居中并且用户赢了“能够滚动吗?

当然,如果有太多的项目,不适合屏幕,我想让RecyclerView正常显示它们(从一开始到它可以显示多少,并允许滚动)。< / p>

要理解我的意思,我认为使用ScrollView(或水平的Horizo​​ntalScrollView)以及将重力设置为居中的LinearLayout可以实现这一点。

2 个答案:

答案 0 :(得分:3)

好的,我想我找到了办法:

首先,我们等待RecyclerView完成其布局过程,因为我发现了here

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

如果它们都与总项目的那些完全相同,则意味着显示了所有需要的视图,因此我可以根据空间在RecyclerView的两侧(或其容器上的填充)添加边距那就离开了。

答案 1 :(得分:1)

我找到了一种复杂的方法来实现这一目标。

主要概念:在代码中动态设置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);

您可能需要通过子计数* 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>

enter image description here