MainActivity.Java
//创建适配器
MyAdapterStag myAdapterStag = new MyAdapterStag(viewlist, MainActivity.this);
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(2, LinearLayoutManager.VERTICAL));
recyclerView.setAdapter(myAdapterStag);
//为RecyclerView增加分割线,水平和垂直方向都有。增加分割线值比如为32。
RecyItemDecortion decoration = new RecyItemDecortion(32);
recyclerView.addItemDecoration(decoration);
适配器:MyAdapterStag
public class MyAdapterStag extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private List<String> list;
private Context context;
private List<Integer> heightList;//textview的高度信息
public MyAdapterStag(List<String> list, Context context) {
this.list = list;
this.context = context;
heightList = new ArrayList<Integer>();
for (int i = 0; i < list.size(); i++) {
heightList.add((int) (Math.random() * 300 + 160));//随机设置textview的高度
}
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.item, null);
MyViewHolder myViewHolder = new MyViewHolder(view);
return myViewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
MyViewHolder myViewHolder = (MyViewHolder) holder;
//获取textview的宽高等信息
ViewGroup.LayoutParams layoutParams = myViewHolder.tv.getLayoutParams();
layoutParams.height = heightList.get(position);//设置textview的高度
myViewHolder.tv.setLayoutParams(layoutParams);
myViewHolder.tv.setText(list.get(position));
}
@Override
public int getItemCount() {
return list.size();
}
//自定义viewholder
class MyViewHolder extends RecyclerView.ViewHolder {
private final TextView tv;
public MyViewHolder(View itemView) {
super(itemView);
tv = itemView.findViewById(R.id.tv);
}
}
}
添加分隔线的类
public class RecyItemDecortion extends RecyclerView.ItemDecoration {
private int space = 0;
private int pos;
public RecyItemDecortion(int space) {
this.space = space;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
outRect.top = space;
//该View在整个RecyclerView中位置。
pos = parent.getChildAdapterPosition(view);
//取模
//两列的左边一列
if (pos % 2 == 0) {
outRect.left = space;
outRect.right = space / 2;
}
//两列的右边一列
if (pos % 2 == 1) {
outRect.left = space / 2;
outRect.right = space;
}
}
}