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

Which android control should i use to get 2 by 2 scrollable grid in android?

我怎样才能拥有 2 x 2 可滚动网格?我应该使用哪个控件?

我尝试了 Grid-View,但由于 Grid-View 不能有固定的行,所以我应该使用 Table-Layout 还是 Grid-Layout?或者在网格视图中使用线性布局?

我希望图像在不按比例缩小或按比例放大的情况下显示,所以我使用 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;
}

下面是示例附件图片

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

我建议您使用 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);

    }