我需要创建一个如下所示的视图(这是一个iOS屏幕截图,因为我已经创建了它)。
每个蓝色框是RecyclerView线性布局的一部分,而每个绿色项目是交错布局的一部分。
我能够创造出这样的结构。问题是我不能让每个灰色的盒子都变成黄色盒子的一半。使用StaggeredGridLayoutManager,我无法控制内部回收器视图中显示的盒子的跨度(大小)。只有GridLayoutManager才有机会设置跨度大小查找。
理想的做法是根据容器的宽度来计算盒子。例如:如果屏幕为99,则黄色框应为66,而灰色框应为33。
你对如何实现这一点有什么建议吗?
下面是我使用的代码片段:
public class BoxViewAdapter extends RecyclerView.Adapter<BoxViewAdapter.BoxViewHolder> {
private List<Box> mValues;
private Context mContext;
protected BoxViewAdapter.ItemListener mListener;
public BoxViewAdapter(Context context, List<Box> values, BoxViewAdapter.ItemListener itemListener) {
mValues = values;
mContext = context;
mListener = itemListener;
}
@Override
public BoxViewAdapter.BoxViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.box_view_item, parent, false);
return new BoxViewAdapter.BoxViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull BoxViewAdapter.BoxViewHolder holder, int position) {
holder.bind(mValues.get(position));
}
@Override
public int getItemCount() {
return mValues.size();
}
public interface ItemListener {
void onItemClick();
}
public class BoxViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
public Box item;
private RecyclerView recyclerView;
public BoxViewHolder(View v) {
super(v);
v.setOnClickListener(this);
StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.HORIZONTAL);
recyclerView = v.findViewById(R.id.cardRecyclerView);
recyclerView.setLayoutManager(staggeredGridLayoutManager);
}
public void bind(Box item) {
this.item = item;
recyclerView.setAdapter(new CardViewAdapter(itemView.getContext(), item.cards, null));
}
@Override
public void onClick(View view) {
if (mListener != null) {
mListener.onItemClick();
}
}
}
}

https://stackoverflow.com/questions/51247550
复制相似问题