android – Recyclerview – GridLayoutManager:设置平方尺寸

我试图做一个网格布局与方形图像。我认为必须有可能通过操纵onMeasure来做一个GridLayoutManager

super.onMeasure(recycler,state,widthSpec,widthSpec);

代替

super.onMeasure(recycler,state,widthSpec,heightSpec);

但不幸的是没有工作。有任何想法吗?

为了在我的RecyclerView中的方形元素,我提供了一个简单的包装我的根View元素;我使用以下SquareRelativeLayout代替RelativeLayout。

package net.simplyadvanced.widget;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.RelativeLayout;

/** A RelativeLayout that will always be square -- same width and height,
 * where the height is based off the width. */
public class SquareRelativeLayout extends RelativeLayout {

    public SquareRelativeLayout(Context context) {
        super(context);
    }

    public SquareRelativeLayout(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public SquareRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @TargetApi(VERSION_CODES.LOLLIPOP)
    public SquareRelativeLayout(Context context, AttributeSet attrs,         int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        // Set a square layout.
        super.onMeasure(widthMeasureSpec, widthMeasureSpec);
    }

}

然后,在适配器的XML布局中,我刚刚引用了自定义视图,如下所示。虽然,你也可以用编程方式。

<?xml version="1.0" encoding="utf-8"?>
<net.simplyadvanced.widget.SquareRelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/elementRootView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">

    <!-- More widgets here. -->

</net.simplyadvanced.widget.SquareRelativeLayout>

注意:根据网格的方向,您可能希望基于高度的宽度(GridLayoutManager.HORIZONTAL),而不是基于宽度的高度(GridLayoutManager.VERTICAL)。

http://stackoverflow.com/questions/26566954/recyclerview-gridlayoutmanager-set-square-dimensions

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:android – Recyclerview – GridLayoutManager:设置平方尺寸