我应该使用哪个 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 与回收站视图一起使用。
我建议您使用 RecyclerView
和 GridLayoutManager
。这将允许您指定列数:
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);
}
我怎样才能拥有 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 与回收站视图一起使用。
我建议您使用 RecyclerView
和 GridLayoutManager
。这将允许您指定列数:
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);
}