如何集中回收者视图的项目?

Cri*_*mez 46 android android-layout android-recyclerview

我需要将每行中的元素居中,这样它们就像在这个模型中一样.我一直在寻找是否有任何布局以这种方式工作而不看.项目以行为中心.

小样

这就是我现在在代码中看起来的样子.在此输入图像描述

Rav*_*dav 43

让recyclerview widthwrap_content与其容器的layout_gravitycenter_horizontal

 <LinearLayout
      android:layout_width="match_parent"
      android:layout_height="wrap_content"
      android:orientation="vertical">

      <android.support.v7.widget.RecyclerView
           android:id="@+id/recycrer_view"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:layout_gravity="center_horizontal"
           android:paddingLeft="16dp"
           android:paddingRight="16dp" />
 </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

  • 这将防止从侧面滚动RecyclerView。 (2认同)

Raj*_*esh 32

LinearLayout在你RecyclerView的项目排布局然后给android:layout_gravity="center"LinearLayout.

对于每一行图像,您必须采取不同的方式LinearLayout.

这是示例代码:

 <LinearLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="center"
         android:orientation="horizontal">

            <ImageView
                android:id="@+id/image1"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:src="@drawable/image1" />

            <ImageView
                android:id="@+id/image2"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:src="@drawable/image2" />

           <ImageView
                android:id="@+id/image3"
                android:layout_width="64dp"
                android:layout_height="64dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:src="@drawable/image3" />

  </LinearLayout>
Run Code Online (Sandbox Code Playgroud)

  • 我不得不修改 RecyclerView layout_width="wrap_content" 而不是 match_parent (2认同)

Ask*_*skQ 9

实现:

recycler.adapter = MyAdapter()
val layoutManager FlexboxLayoutManager( context: this)
layoutManager.justifyContent = JustifyContent.CENTER
layoutManager.alignItems = AlignItems.CENTER
layoutManager.flexDirection = FlexDirection. ROW layoutManager.flexWrap = FlexWrap.WRAP
my recycler.layout Manager = = layout Manager
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Com*_*are 8

我假设您使用的LinearLayoutManagerRecyclerViewa- ListViewstyle式效果.在这种情况下,horizontal LinearLayout为每一行使用a ,android:gravity="center"以使其内容居中.

  • @cgomezmendez:我认为通过`GridLayoutManager`或者通过自定义`RecyclerView.LayoutManager`会有一些方法可以做到这一点.我很快就看不到如何使用`GridLayoutManager`来做到这一点. (3认同)

ers*_*tan 5

FlexboxLayoutcom.google.android:flexbox图书馆使用。请注意flexwrapjustifyContent属性值。然后,layout_wrapBefore = true在视图上设置要在之前包装项目行。

    <com.google.android.flexbox.FlexboxLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:flexWrap="wrap"
        app:justifyContent="center">

        <View ... />

        <View app:layout_wrapBefore="true" ... />

        <View ... />

    </com.google.android.flexbox.FlexboxLayout>
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,这是一种非常干净的方法。特别地,您可以将该库用作“recyclerview”的“layoutManager”。您所要做的就是设置具有方向和对齐要求的布局管理器。无需制作第三个最佳答案中提到的二维回收站视图。 (4认同)