在android中创建一个网格视图,行中的项目宽度不相等
我正在尝试创建一个模拟下图的布局 所需屏幕的用户界面: 我需要在列表中调用两个xml文件。它们的属性和列表中的行数是动态的,所以在运行时填充。他们的身高是一样的。但是,其宽度必须以1:1:1.3的比例分布在整个屏幕上 我首先尝试使用gridview,然后尝试使用gridlayoutmanager进行recyclerview。我可以在适配器的onBindViewHolder()中静态设置宽度。但是对于不同的屏幕,它是不同的,并且也会影响我使用RecyclerView.ItemEncoration设置的项目之间的间距。有没有办法动态设置行中其他项目的宽度 以下是我的部分代码: 在活动的onCreate()中:在android中创建一个网格视图,行中的项目宽度不相等,android,gridview,android-recyclerview,gridlayoutmanager,Android,Gridview,Android Recyclerview,Gridlayoutmanager,我正在尝试创建一个模拟下图的布局 所需屏幕的用户界面: 我需要在列表中调用两个xml文件。它们的属性和列表中的行数是动态的,所以在运行时填充。他们的身高是一样的。但是,其宽度必须以1:1:1.3的比例分布在整个屏幕上 我首先尝试使用gridview,然后尝试使用gridlayoutmanager进行recyclerview。我可以在适配器的onBindViewHolder()中静态设置宽度。但是对于不同的屏幕,它是不同的,并且也会影响我使用RecyclerView.ItemEncoration
recyclerViewLayoutManager = new GridLayoutManager(context,3);
int spacingInPixels = getResources().getDimensionPixelSize(R.dimen._3sdp);
recyclerView.addItemDecoration(new StoreSpaces(spacingInPixels));
recyclerView.setLayoutManager(recyclerViewLayoutManager);
recyclerView.setAdapter(new StoreRecycleAdapter(context,backgroundTheme, categoryNames));
适配器类:
public class StoreRecycleAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
Context context;
int[] contentBg ;
final int CATEGORY =0, SUBCATEGORY=1;
String[] catNames;
StoreRecycleAdapter (Context context, int[] contentBg, String[] catNames){
this.contentBg =contentBg;
this.context =context;
this.catNames =catNames
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(parent.getContext());
switch (viewType) {
case CATEGORY:
View v1 = inflater.inflate(R.layout.category,parent, false);
viewHolder = new ViewHolder1(v1);
break;
case SUBCATEGORY:
View v2 = inflater.inflate(R.layout.subcategory, parent, false);
viewHolder = new ViewHolder1(v2);
break;
default:
View v3 = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
viewHolder = new ViewHolder1(v3);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
switch (holder.getItemViewType()) {
case CATEGORY:
break;
case SUBCATEGORY:
/* ViewGroup.LayoutParams params2 = holder.itemView.getLayoutParams();
params2.width =270;
holder.itemView.setLayoutParams(params2);*/
ViewHolder1 vh1 = (ViewHolder1) holder;
vh1.gridText.setText(catNames[position]);
vh1.gridLL.setBackgroundResource(contentBg[position]);
break;
default:
break;
}
}
@Override
public int getItemViewType(int position) {
if ((position-2)%3==0 ) {
return CATEGORY;
} else
return SUBCATEGORY;
}
@Override
public int getItemCount() {
return catNames.length ;
}
public class ViewHolder1 extends RecyclerView.ViewHolder{
RelativeLayout gridLL;
TextView gridText;
public ViewHolder1(View v){
super(v);
gridLL = (RelativeLayout) v.findViewById(R.id.gridLayout);
gridText = (TextView) v.findViewById(R.id.nameTxt);
}
}
公共类StoreRecycleAdapter扩展了RecycleView.Adapter{
语境;
int[]contentBg;
最终整数类别=0,子类别=1;
字符串[]catNames;
StoreRecycleAdapter(上下文,int[]contentBg,String[]catNames){
this.contentBg=contentBg;
this.context=上下文;
this.catNames=catNames
}
@凌驾
public RecyclerView.ViewHolder onCreateViewHolder(视图组父级,int-viewType){
RecyclerView.ViewHolder-ViewHolder;
LayoutInflater充气器=LayoutInflater.from(parent.getContext());
开关(视图类型){
个案类别:
视图v1=充气机。充气(右布局。类别,父项,错误);
viewHolder=新的ViewHolder1(v1);
打破
案例子类别:
视图v2=充气机。充气(R.layout.subcategory,parent,false);
viewHolder=新的ViewHolder1(v2);
打破
违约:
视图v3=充气机。充气(android.R.layout.simple\u list\u item\u 1,父项,false);
viewHolder=新的ViewHolder1(v3);
打破
}
返回视图持有者;
}
@凌驾
BindViewHolder上的公共无效(RecyclerView.ViewHolder,int位置){
开关(holder.getItemViewType()){
个案类别:
打破
案例子类别:
/*ViewGroup.LayoutParams params2=holder.itemView.getLayoutParams();
参数2.width=270;
holder.itemView.setLayoutParams(params2)*/
ViewHolder1 vh1=(ViewHolder1)支架;
vh1.gridText.setText(catNames[position]);
vh1.gridLL.setBackgroundResource(contentBg[位置]);
打破
违约:
打破
}
}
@凌驾
public int getItemViewType(int位置){
如果((位置-2)%3==0){
退货类别;
}否则
返回子类别;
}
@凌驾
public int getItemCount(){
返回catNames.length;
}
公共类ViewHolder 1扩展了RecyclerView.ViewHolder{
相对网格;
文本视图网格文本;
公共视图持有者1(视图v){
超级(五);
gridLL=(RelativeLayout)v.findViewById(R.id.gridLayout);
gridText=(TextView)v.findViewById(R.id.nameTxt);
}
}
}提供一些相关的代码跟踪,我们可以从中参考。