Android 在StaggedGridLayoutManager中设置范围
我需要创建一个如下所示的视图(这是一个iOS屏幕截图,因为我已经创建了它) 每个蓝色框都是Android 在StaggedGridLayoutManager中设置范围,android,android-recyclerview,staggered-gridview,Android,Android Recyclerview,Staggered Gridview,我需要创建一个如下所示的视图(这是一个iOS屏幕截图,因为我已经创建了它) 每个蓝色框都是回收视图线性布局的一部分,而每个绿色项都是交错布局的一部分 我能创造出这样的结构。问题是,我不能使每个灰色框都成为黄色框的一半。使用StaggedGridLayoutManager我无法控制内部回收器视图中显示的框的范围(大小)。只有GridLayoutManager有机会设置跨度大小查找 目的是根据集装箱的尺寸计算箱子。例如:如果屏幕为99,则黄色框应为66,而灰色框应为33 你对如何实现这一目标有什么建
回收视图
线性布局的一部分,而每个绿色项都是交错布局的一部分
我能创造出这样的结构。问题是,我不能使每个灰色框都成为黄色框的一半。使用StaggedGridLayoutManager
我无法控制内部回收器视图中显示的框的范围(大小)。只有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();
}
}
}
}
公共类BoxViewAdapter扩展了RecyclerView.Adapter{
私有列表价值;
私有上下文;
受保护的BoxViewAdapter.ItemListener MLListener;
公共BoxViewAdapter(上下文上下文、列表值、BoxViewAdapter.ItemListener ItemListener){
M值=值;
mContext=上下文;
mListener=itemstener;
}
@凌驾
public-BoxViewAdapter.BoxViewHolder onCreateViewHolder(视图组父级,int-viewType){
视图=LayoutView=LayoutFlater.from(mContext)。充气(R.layout.box\u视图\u项,父项,false);
返回新的BoxViewAdapter.BoxViewHolder(视图);
}
@凌驾
public void onBindViewHolder(@NonNull-BoxViewAdapter.BoxViewHolder,int位置){
holder.bind(mValues.get(position));
}
@凌驾
public int getItemCount(){
返回mValues.size();
}
公共接口ItemListener{
void onite mclick();
}
公共类BoxViewHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener{
公共箱项目;
私人回收站;
公用箱视图支架(视图v){
超级(五);
v、 setOnClickListener(此);
StaggedGridLayoutManager StaggedGridLayoutManager=新的StaggedGridLayoutManager(2,StaggedGridLayoutManager.HORIZONTAL);
recyclerView=v.findViewById(R.id.cardRecyclerView);
recyclerView.setLayoutManager(StaggedGridLayoutManager);
}
公共无效绑定(框项目){
this.item=项目;
setAdapter(新的CardViewAdapter(itemView.getContext(),item.cards,null));
}
@凌驾
公共void onClick(视图){
if(mListener!=null){
mListener.onItemClick();
}
}
}
}
与此同时,我已经解决了这个问题 在
CardViewAdapter
的onBindViewHolder
中,我只需为itemView
设置LayoutParams
。由于项目视图是在RecyclerView
中呈现的,因此StaggedGridLayoutManager
知道如何处理它
@Override
public void onBindViewHolder(@NonNull CardViewHolder viewHolder, int position) {
if (mUseLayoutParameters) {
int singleScreenWidth = DisplayUtils.getScreenWidth() / 3;
Card card = mValues.get(position);
if (card.isDoubleSized) {
singleScreenWidth = singleScreenWidth * 2;
}
StaggeredGridLayoutManager.LayoutParams layoutParams = new StaggeredGridLayoutManager.LayoutParams(singleScreenWidth, ViewGroup.LayoutParams.MATCH_PARENT);
viewHolder.itemView.setLayoutParams(layoutParams);
}
viewHolder.bind(mValues.get(position));
}