【问题标题】:How to center RecyclerView in the center (and without scrolling) when possible?如果可能,如何将 RecyclerView 居中(并且不滚动)?
【发布时间】:2016-03-22 17:49:55
【问题描述】:

这是一个简短的问题:

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

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

为了理解我的意思,我认为在使用 ScrollView(或 Horizo​​ntalScrollView,如果是水平的)以及将重力设置为 centered 的 LinearLayout 时,这样的事情是可能的。

【问题讨论】:

    标签: android android-recyclerview centering


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 如果视图大小不同怎么办?或者有一个“wrap_content”高度,它可能会根据数据的内容而改变?
      • @androiddeveloper 是的..我的方法太复杂了。对于不同的项目视图,代码可能是 1.view.measuer(0,0) 2.view.getmesuredheight。我喜欢你的方式!
      • 谢谢。实际上你付出了更多的努力,所以我给你+1。 :)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      相关资源
      最近更新 更多