当前位置: 首页 > 知识库问答 >
问题:

在RecyclerView中水平居中项目(使用GridLayoutManager)

沈骞仕
2023-03-14

我正尝试在recyclerview中为每一行水平居中所有项目

我尝试了很多东西:作为父级的RelativeLayout,然后使用layout_centerInParent,使用基本的Android:layout_gravity=“center”,尝试添加一些space元素,使用权重和....在item_row.xml
中,但我没有成功:(

我所拥有的

活动中

recyclerView.setLayoutManager(new GridLayoutManager(this, 3));

item_row.xml

<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:card_view="http://schemas.android.com/apk/res-auto"
android:id="@+id/cardView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
card_view:cardCornerRadius="2dp"
card_view:cardElevation="4dp"
card_view:cardUseCompatPadding="true">

<!--   Recycler View Item Row   -->
<LinearLayout
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical">


    <ImageView
        android:id="@+id/imgThumbnail"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:adjustViewBounds="true"
        android:background="@android:color/black" />

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


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="item name"
            android:id="@+id/txtName"
            android:layout_margin="5dp"
            android:singleLine="false"
            android:lines="2"
            android:gravity="center" />

        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <TextView
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:textAppearance="?android:attr/textAppearanceSmall"
                android:id="@+id/txtCategory"
                android:textStyle="italic"
                android:textColor="#496fa9"
                android:text="subtitle"
                android:layout_weight="1"
                android:gravity="center_vertical"
                android:paddingLeft="10dp"
                android:layout_gravity="center" />

            <ImageButton
                android:id="@+id/imageButton"
                android:layout_width="48dp"
                android:layout_height="wrap_content"
                android:background="@android:color/black"
                android:adjustViewBounds="true"
                android:scaleType="fitCenter"
                android:padding="8dp"/>

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

</android.support.v7.widget.CardView>

我在谷歌上搜索了很多,找到了这个答案,但实际上我不知道如何为每一行项目创建linearlayout

共有1个答案

葛季萌
2023-03-14

您可以使用SpanSizeLookup为您的网格视图制作具有不同宽度的视图/项。因此,您可以对空视图进行一些巧妙的调整。可能更复杂或更简单,这取决于您的布局实际的可变程度。

参考:https://developer.android.com/reference/android/support/v7/widget/gridlayoutmanager.spansizelookup.html

对于您在绘图上显示的这个特定情况,您可以执行如下操作:

GridLayoutManager lm = new GridLayoutManager(context, 6);
lm.setSpanSizeLookup(new MySizeLookup());

public static class MySizeLookup extends SpanSizeLookup {

   public int getSpanSize(int position) {
      if(position >= 0 && position <= 2) {
          return 2;
      } else if (position == 3 || position == 6) {
          return 1;
      } else {
          return 2;
      }
   }
}
 类似资料:
  • 我有一个垂直的,使用。我希望每一列都居中,但列都从左边开始。在下面的图片中,你可以看到我在说什么。我用难看的配色方案来说明柱子和背景。绿色是中每个项目的背景,红色是本身的背景: http://imgur.com/a/J3HtF 我正在设置它: column_item.xml如下: 以下是recyclerview xml:

  • 我需要将每一行的元素居中,这样他们就会像这个模型一样。我一直在搜索是否有任何布局,以这种方式工作没有外观。项在其行中居中。

  • 问题内容: 这可能是一个愚蠢的问题,但是由于居中对齐图像的常规方法不起作用,所以我想问一下。如何在容器div内居中对齐(水平)图像? 这是HTML和CSS。我还包括了缩略图其他元素的CSS。它以降序运行,因此最高的元素是所有内容的容器,最低的元素是所有内容的内部。 好的,我添加了不带PHP的标记,因此应该更容易理解。这两种解决方案似乎都无法在实践中起作用。顶部和底部的文本不能居中,并且图像应在其容

  • 我想要中心的div水平与一个选项滚动使用CSS。我怎样才能做到呢?我看到了一个解决方案使用边距自动和最大宽度,但div将被削减,所以我没有这样做。 null null

  • 问题内容: 我有一个div,希望它水平居中-尽管我给它的是不居中… 问题答案: 您需要设置和。 这指定了从窗口侧面偏移边缘边缘的距离。 类似于“ top”,但指定框的右边距边缘与框的包含块的[right / left]边缘的[left / right]偏移多远。 注意: 元素的宽度必须 小于 窗口的宽度,否则它将占用窗口的整个宽度。 如果可以使用媒体查询来指定 最小 边距,然后过渡到更大的屏幕尺寸

  • 我很难将容器中的一些内容水平居中: https://jsfiddle.net/y56t31q9/6/ 我本以为justify-content会做到这一点,但无济于事。 如有任何帮助,不胜感激,谢谢!