我需要创建如下所示的视图(这是iOS屏幕快照,因为我已经创建了它)。
每个蓝色框都是RecyclerView
的线性布局的一部分,而每个绿色框都是交错布局的一部分。
我能够创建该结构。问题是我不能使每个灰色框变成黄色框的一半。使用StaggeredGridLayoutManager
,我无法控制内部回收者视图中显示的框的跨度(大小)。只有GridLayoutManager
才有机会设置跨度大小查询。
目标是根据容器的with来计算盒子。例如:如果屏幕为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();
}
}
}
}
答案 0 :(得分:0)
与此同时,我已经解决了这一问题。
在onBindViewHolder
的{{1}}中,我仅将CardViewAdapter
设置为LayoutParams
。由于项目视图是在itemView
内部渲染的,因此RecyclerView
知道如何处理它。
StaggeredGridLayoutManager