我正在使用recyclerview和GridLayoutManager。我还使用以下代码将第一项设置为大
lLayout.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int i) {
if (i==0) return 2;
else return 1;
}
});
一切正常,除了一个:位置1的项目(即大图像中的下一个项目)垂直拉长以匹配大项目的高度。从第3行开始,所有图像都如图所示。
我怎样摆脱这个?
编辑:经过一些分析后
所以问题似乎是大图像水平地采用两个跨度但垂直单跨,因为我强制我的ImageView是方形的,看起来它也采取了两行,其实它是一个单一的行。由于这个原因,第二张图像看起来很长。
所以现在我的问题是,如何使网格项垂直两个跨度,两个水平跨度?
答案 0 :(得分:3)
尝试使用 StaggeredGridLayoutManager 而不是 GridLayoutManager 。 StaggeredGridLayoutManager支持横向和&垂直布局以及反向布局儿童的能力。 适配器的 onBindViewHolder 方法,您可以使用此代码根据项目的位置设置范围
final ViewGroup.LayoutParams lp = holder.itemView.getLayoutParams();
if (position == 0) {
StaggeredGridLayoutManager.LayoutParams sglp = (StaggeredGridLayoutManager.LayoutParams) lp;
sglp.setFullSpan(true);
holder.itemView.setLayoutParams(sglp);
}
找到示例http://enoent.fr/blog/2015/01/18/recyclerview-basics/ ...希望它能帮到你
答案 1 :(得分:0)
在GridViewAdapter类中尝试以下代码
public class GridViewAdapter extends BaseAdapter {
private Context context;
private ArrayList<Integer> imageArrayList = new ArrayList<>();
private int type;
public GridViewAdapter(Context context, ArrayList<Integer> imageArrayList) {
this.context = context;
this.imageArrayList = imageArrayList;
}
@Override
public int getCount() {
return imageArrayList.size();
}
@Override
public Object getItem(int position) {
return imageArrayList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder = new ViewHolder();
if(convertView==null){
LayoutInflater inflater = LayoutInflater.from(context);
type = getItemViewType(position);
if(type==0) {
convertView = inflater.inflate(R.layout.big_layout,parent,false);
}else {
convertView = inflater.inflate(R.layout.small_layout, parent, false);
}
viewHolder.imageView = convertView.findViewById(R.id.imageView);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.imageView.setImageDrawable(context.getResources().getDrawable(imageArrayList.get(position)));
return convertView;
}
@Override
public int getViewTypeCount() {
return super.getViewTypeCount();
}
@Override
public int getItemViewType(int position) {
if(position==0) {
return 0;
}else{
return 1;
}
}
private class ViewHolder{
ImageView imageView;
}
}