我应该使用哪个android控件来获取android中的2 x 2可滚动网格?

时间:2015-12-31 11:50:45

标签: android android-layout gridview tablelayout grid-layout

我如何才能拥有2 x 2可滚动网格?我应该使用哪种控制?

我尝试过网格视图,因为网格视图不能有固定的行,所以我应该使用表格布局还是网格布局?或在网格视图中使用线性布局?

我想要显示图像而不缩小或放大,所以我使用AUTO_FIT,我得到三行以下代码,但我只想要两行和两列

@Override public View getView(int position, View convertView, ViewGroup parent) 
{
    ImageView view;

    if (convertView == null) 
    {

        view = (ImageView) convertView;
        view = new ImageView(context);
        view.setAdjustViewBounds(true);
        view.setLayoutParams(new GridView.LayoutParams(GridView.AUTO_FIT, GridView. AUTO_FIT));

    }
    else
         view = (ImageView) convertView;

    String url = getItem(position);

    Picasso.with(context).load(url).error(R.mipmap.no_photo).fit().into(view);

    return view;
}

以下是附加图片样本

enter image description here

2 个答案:

答案 0 :(得分:2)

我建议你使用RecyclerViewGridLayoutManager。这将允许您指定列数:

recyclerView.setLayoutManager(new GridLayoutManager(context, 2));

如果您想设置行高以使两行始终与屏幕高度匹配,则可以在适配器的onBindView()内进行设置。您可以通过从Toolbar

的高度减去屏幕高度来确定相对行高
//Could calculate this in your `Activity` class and pass the value to your Adapter
public int getProprtionalRowHeight() {

    DisplayMetrics displaymetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displaymetrics);
    int height = displaymetrics.heightPixels;

    return ((height - toolbar.getHeight()) / 2);

}

在适配器中:

@Override
public void onBindViewHolder(ItemViewHolder holder, int position) {

    //...

        ViewGroup.LayoutParams params = holder.itemView.getLayoutParams();
        params.height = valueReturnedFromGetProprtionalRowHeight;
        holder.itemView.setLayoutParams(params);

    }

答案 1 :(得分:1)

您可以将StaggeredGrid用于此目的,其稳定且易于使用。 您还可以将StaggeredGridLayoutManager与回收站视图一起使用。