首先是效果图
然后是关键代码
//onBindViewHolder 给Item元素赋值
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
//获取内容layout的parms
ViewGroup.LayoutParams parm = holder.layout.getLayoutParams();
//通过获取gridlayoutmanager的个数于宽度动态给parm赋予高度
parm.height = gridLayoutManager.getWidth()/ gridLayoutManager.getSpanCount()
- 2 * holder.layout.getPaddingLeft() - 2*((ViewGroup.MarginLayoutParams)parm).leftMargin;
}
其中的layout为item中的layout,通过以下方法绑定的
class ViewHolder extends RecyclerView.ViewHolder {
TextView mText;
ImageView mImage;
LinearLayout layout;
ViewHolder(View itemView) {
super(itemView);
layout = itemView.findViewById(R.id.layout);
mImage = itemView.findViewById(R.id.ItemImageView);
mText = itemView.findViewById(R.id.item_tx);
}
}
gridLayoutManager为GridLayoutManager,在构造函数里传递进来
public GridItemAdapter(List<GridItemEntity> list, GridLayoutManager gridLayoutManager) {
this.list = list;
this.gridLayoutManager =gridLayoutManager;
}
recyclerView调用方代码如下
GridLayoutManager gridLayoutManager = new GridLayoutManager(this, 3);
//设置RecyclerView管理器
gridListView.setLayoutManager(gridLayoutManager);
//初始化适配器
mAdapter = new GridItemAdapter(list,gridLayoutManager);
over