recyclerview 实现正方形网格效果

如下图所示,我们要实现类似图片的效果:

recyclerview 实现正方形网格效果_第1张图片

首先想到的是使用gridviw实现,但是用gridview实现分割线效果比较繁琐,恰巧鸿样大神用Recycleview实现了gridview+分割线的效果,链接地址:

http://blog.csdn.net/lmj623565791/article/details/45059587


然后就是按惯例写item布局:




    

    

一切就绪,真机跑起来,我用的一台的nexus4测试,下面是显示效果:

recyclerview 实现正方形网格效果_第2张图片

图片被拉长了,上面还有留白,为什么会产生这种问题呢:

 仔细想想,item布局的宽度是你指定Recycleview列数以后确定下来,高度在onmeasue方法里计算出来,如果想要实现效果图那样矩形的效果,自然需要宽高一样。

有了思路以后,只需要把item布局的父布局搞成宽高一样就哦了

自定义一个简单的relativelayout:

public class SquareRelativeLayout extends RelativeLayout {

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

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

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

	@Override
	protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
		setMeasuredDimension(getDefaultSize(0, widthMeasureSpec),
				getDefaultSize(0, heightMeasureSpec));

		int childWidthSize = getMeasuredWidth();
		// 高度和宽度一样
		heightMeasureSpec = widthMeasureSpec = MeasureSpec.makeMeasureSpec(
				childWidthSize, MeasureSpec.EXACTLY);
		super.onMeasure(widthMeasureSpec, heightMeasureSpec);
	}

}

别忘了 super 还有子布局呢。

现在在看一下效果:

recyclerview 实现正方形网格效果_第3张图片

与效果图一致。这里是提供一个思路,这样做的好处是不用写不同的dimensions适配,当宽或高一方固定时,可以通过比例实现布局的大小。

如果还有疑问建议看看郭神关于view的文章,本屌受益匪浅。

你可能感兴趣的:(Android)