欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Recyclerview列表item设置成等宽高的正方形

程序员文章站 2022-04-02 21:51:43
...

第一种方法是动态设置宽高:(亲测有效

//设置item的高度跟随宽度走
ViewGroup.LayoutParams parm = holder.layoutContent.getLayoutParams();
parm.height = gridLayoutManager.getWidth()/ gridLayoutManager.getSpanCount()
- 2*holder.layoutContent.getPaddingLeft() - 2*((ViewGroup.MarginLayoutParams)parm).leftMargin;

第二种方法是在item外层嵌套一个自定义为正方形的布局:(亲测有效,但是在多类型布局中有可能出现底部出现留白的问题,所以推荐使用第一种方法)

public class SquareView extends RelativeLayout {
    public SquareView(Context context) {
        super(context); }
    public SquareView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    public SquareView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

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

         widthMeasureSpec = MeasureSpec.makeMeasureSpec( childWidthSize, MeasureSpec.EXACTLY);
        // 高度和宽度一样
         heightMeasureSpec = widthMeasureSpec;
         //设定高是宽的比例
         super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    }
}