代码之家  ›  专栏  ›  技术社区  ›  Shubham AgaRwal

Android RecyclerView在开始和结束时添加水平间隙

  •  3
  • Shubham AgaRwal  · 技术社区  · 9 年前

    我有一个 RecyclerView 具有 LinearLayoutManager 和水平方向。到现在为止,一直都还不错。

    <android.support.v7.widget.RecyclerView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:orientation="horizontal"
                app:layoutManager="android.support.v7.widget.LinearLayoutManager"
                tools:listitem="@layout/item_recycler_view" />
    

    Android RecyclerView

    但是,如果 iOS (这意味着即使项目从中心加载,也可以进行全宽滚动) .

    我知道添加填充/边距或使用不同的视图是没有用的,例如 HorizontalScrollView . 我们如何才能获得这样的行为,让我给用户提供几乎相同的体验。

    iOS SCROLL VIEW

    如果我能提供什么来澄清问题陈述,请告诉我。

    3 回复  |  直到 9 年前
        1
  •  3
  •   Mauker    9 年前

    快速解决方案

    在列表的开头和结尾分别添加一个空项,并将这两个额外的项作为索引访问帐户。这应该能帮助你达到想要的效果。

    不是那么快的解决方案

    Android允许我们编写自己的自定义布局管理器 RecyclerView . 它有三种类型,将涵盖大多数用户案例:

    • LinearLayoutManager(适用于一般列表);
    • GridLayoutManager(用于网格);

    阅读 this 和 this ,介绍如何创建自定义布局管理器。另外,看看 the docs . 这应该是一个好的开始。

        2
  •  1
  •   Ben P.    9 年前

    有两种方法可以做到这一点。到目前为止,最简单的方法是将水平填充添加到 RecyclerView 并将视图设置为不基于填充进行剪裁。类似这样:

    android:paddingLeft="100dp"
    android:paddingRight="100dp"
    android:clipToPadding="false"
    

    另一种方法是创建 ItemDecoration 并将其添加到 回收视图 . 然后可以覆盖 getItemOffsets() 方法将左侧偏移量添加到第一个项目,将右侧偏移量添加到最后一个项目。

    第二种方法更好,因为它不会影响RecyclerView的滚动条,但更复杂一点。下面是一个开始的示例:

    private static class MyItemDecoration extends RecyclerView.ItemDecoration {
    
        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            int parentWidth = parent.getWidth();
            int childWidth = view.getWidth();
            int margin = (parentWidth - childWidth) / 2;
    
            int position = parent.getChildAdapterPosition(view);
    
            outRect.left = position == 0 ? margin : 0;
            outRect.right = position == (parent.getAdapter().getItemCount() - 1) ? margin : 0;
        }
    }
    
        3
  •  0
  •   Sangeet Suresh    9 年前

    我认为唯一的方法是在recyclerview的适配器中为第一个和最后一个位置添加不同的布局。

    可以使用 viewType 中的参数 createViewHolder(ViewGroup parent, int viewType)