【问题标题】:How to show only 2 grid item in the recyclerview that fit in x and y?如何在 recyclerview 中仅显示 2 个适合 x 和 y 的网格项?
【发布时间】:2015-12-03 11:06:12
【问题描述】:

我有一个RecyclerView,它显示在fragment 内,网格Layoutmanager。我的问题是如何在屏幕的一半中显示一个网格项?

我只想显示 2 列,它们的高度相同。

这是我的网格项(代表一个网格项):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:card_view="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.CardView
        android:id="@+id/cardViewGridItemXml"
        android:layout_width="300dp"
        android:layout_height="wrap_content"
        card_view:cardCornerRadius="3dp"
        android:layout_marginTop="3dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        card_view:cardElevation="0.01dp"
        android:layout_marginBottom="0dp">

        <RelativeLayout
            android:id="@+id/topLayoutGridItemXml"
            android:layout_width="165dp"
            android:layout_height="160dp">

            <ImageView
                android:id="@+id/imgTumbnailGridItemXml"
                android:layout_width="wrap_content"
                android:layout_height="150dp"
                android:scaleType="fitXY"
                android:layout_above="@+id/txtTitleGridItemXml"
                android:src="@drawable/leopard"
                />

            <TextView
                android:id="@+id/txtTitleGridItemXml"
                android:layout_width="fill_parent"
                android:layout_height="40dp"
                android:paddingLeft="5dp"
                android:paddingRight="2dp"
                android:layout_gravity="bottom"
                android:background="#ff444444"
                android:textColor="#fff"
                android:textSize="20dp"
                android:text="Test"
                android:layout_alignParentBottom="true"
                android:layout_alignParentLeft="true"
                android:layout_alignParentStart="true"
                />


        </RelativeLayout>



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

</LinearLayout>

这是我的GridLayoutManager

 GridLayoutManager  gridLayoutManager = new GridLayoutManager(getActivity(), 2);
 recyclerView.setLayoutManager(gridLayoutManager);

【问题讨论】:

  • android:columnCount = 在你的网格布局 xml 定义中使用这个属性
  • 在您的 Top LinearLayout 中使用 android:layout_columnSpan="2"

标签: java android android-layout gridview android-recyclerview


【解决方案1】:

用于设置固定列数

 GridLayoutManager  gridLayoutManager = new GridLayoutManager(getActivity(), 2);
 gridLayoutManager.setSpanCount(NUMBER_OF_COLUMN_YOU_NEED);
 recyclerView.setLayoutManager(gridLayoutManager);

公共无效 setSpanCount(int spanCount)
设置要布局的跨度数。
如果getOrientation()VERTICAL,这是列数。
如果getOrientation()HORIZONTAL,这是行数。

【讨论】:

    【解决方案2】:

    首先创建一个用于回收的xml文件

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
                 android:orientation="vertical"
                 android:layout_width="match_parent"
                 android:layout_height="match_parent"
                 android:foreground="?android:attr/selectableItemBackground">
    
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                      android:orientation="vertical"
                      android:layout_width="match_parent"
                      android:layout_height="match_parent"
                        android:layout_marginTop="30dp"
                      android:padding="@dimen/spacing_xsmall">
    
    
            <com.swoquix.developer.kumbhevents.widgets.SquareImageView
                android:id="@+id/image"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@android:color/black"
                android:scaleType="centerCrop"/>
    
            <TextView
                android:id="@+id/text"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="@dimen/spacing_large"
                android:textColor="@android:color/white"
                android:background="@android:color/black"/>
    
        </LinearLayout>
    
    </FrameLayout>
    

    现在取决于您如何从 JSON 或本地数据库中获取数据。根据您的需要创建您的适配器类,然后创建自定义 GridRecyclerView 类如下:-

    public class GridRecyclerView extends RecyclerView {
    
        public GridRecyclerView(Context context) {
            super(context);
        }
    
        public GridRecyclerView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public GridRecyclerView(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        @Override
        public void setLayoutManager(LayoutManager layout) {
            if (layout instanceof GridLayoutManager) {
                super.setLayoutManager(layout);
            } else {
                throw new ClassCastException("You should only use a GridLayoutManager with GridRecyclerView.");
            }
        }
    
        @Override
        protected void attachLayoutAnimationParameters(View child, @NonNull ViewGroup.LayoutParams params, int index, int count) {
        if (getAdapter() != null && getLayoutManager() instanceof GridLayoutManager) {
    
            GridLayoutAnimationController.AnimationParameters animationParams =
                    (GridLayoutAnimationController.AnimationParameters) params.layoutAnimationParameters;
    
            if (animationParams == null) {
                animationParams = new GridLayoutAnimationController.AnimationParameters();
                params.layoutAnimationParameters = animationParams;
            }
    
            int columns = ((GridLayoutManager) getLayoutManager()).getSpanCount();
    
            animationParams.count = count;
            animationParams.index = index;
            animationParams.columnsCount = columns;
            animationParams.rowsCount = count / columns;
    
            final int invertedIndex = count - 1 - index;
            animationParams.column = columns - 1 - (invertedIndex % columns);
            animationParams.row = animationParams.rowsCount - 1 - invertedIndex / columns;
    
        } else {
            super.attachLayoutAnimationParameters(child, params, index, count);
        }
    }
    

    }

    接下来你想做的。将代码粘贴到您的 MainActivity

     recyclerView = (RecyclerView) findViewById(R.id.recycler);
            recyclerView.setLayoutManager(new GridLayoutManager(this, 2));
    

    我想你找到了答案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多