如何在Android中以编程方式创建GridView图库?

9
我想要通过编程创建一个3x3的网格视图来展示图片。我希望可以通过获取屏幕尺寸来设置每个元素的宽度和高度。例如:
DisplayMetrics metrics = context.getResources().getDisplayMetrics();
int width = metrics.widthPixels;
int height = metrics.heightPixels;

然后每个项目 width = screenWidth/3;

请有人帮助我或提供一些参考链接。

3个回答

12

这是您可以通过编程方式创建gridview的方法:

    GridView grid = new GridView(this);
    grid.setId(ViewIdentification.getId());
    grid.setLayoutParams(new GridView.LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
    grid.setBackgroundColor(Color.WHITE);
    grid.setNumColumns(3);
    grid.setColumnWidth(GridView.AUTO_FIT);
    grid.setVerticalSpacing(5);
    grid.setHorizontalSpacing(5);
    grid.setStretchMode(GridView.STRETCH_COLUMN_WIDTH);

将上述视图添加到您的布局中。在这里,您可以获取显示器的高度和宽度。


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

以下是适配器类:

public class ImageAdapter extends BaseAdapter {

    private Context mContext;
    private Bitmap[]mis_fotos;

    public ImageAdapter(Context c) {
        mContext = c;    }

    public int getCount() {
        return mis_fotos.length;
        }

    public Object getItem(int position) {
        return position;    }

    public long getItemId(int position) {
        return 0;    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ImageView imageView;
        if (convertView == null) {
            imageView = new ImageView(mContext);
            imageView.setLayoutParams(new GridView.LayoutParams(width/3, height/3));
            imageView.setScaleType(ImageView.setScaleType(ScaleType.FIT_XY));
            imageView.setPadding(0, 0, 0, 0);
        } else {
            imageView = (ImageView) convertView;
        }
        imageView.setImageBitmap(mis_fotos[position]);
        return imageView;
    }
}

那么,由你决定,如果你正在传递动态URL,请相应地更改你的适配器。 将你的适配器设置为你的网格视图。 如果你有任何问题,请告诉我。


我必须在哪里编写上述两部分? - John R
OnCreate 中创建一个GridView并获取宽度和高度。之后创建适配器类。 - Rethinavel
我正在使用可绘制图像,因此在位图代码上遇到了错误。如何更改? - John R
我想要获取可绘制图像的数组。 - John R
让我们在聊天中继续这个讨论:http://chat.stackoverflow.com/rooms/49647/discussion-between-rethinavel-pillai-and-john-r - Rethinavel

2
在您的活动中:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
GridView gridView = new GridView(this);
gridView.setNumColumns(3);
setContentView(gridView);
gridView.setAdapter(new GridViewAdapter(this));
}

适配器:

private class GridViewAdapter extends BaseAdapter {
private Context context;
private final int length = 9;
public GridViewAdapter(Context context) {
            this.context = context;
}
@Override
        public int getCount() {
            return length;
        }
@Override
        public Object getItem(int position) {
            return null;
        }
@Override
        public long getItemId(int position) {
            return 0;
        }
@Override
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView;
            if (convertView == null) {
                imageView = new ImageView(context);
                DisplayMetrics metrics = context.getResources().getDisplayMetrics();
                int width = metrics.widthPixels / 3;
                int height = metrics.heightPixels / 3;
                imageView.setLayoutParams(new GridView.LayoutParams(width, height));
            } else {
                imageView = (ImageView) convertView;
            }
imageView.setImageResource(R.drawable.ic_launcher);
            return imageView;
        }
    }

0
对于程序生成的GridViewsetContentView非常重要。
因此,对于来自资源的GridView,您可以只需:
GridView gridView = (GridView)findViewById(R.id.grid);
gridView.setNumColumns(4); /* etc */
gridView.setAdapter(new MyAdapter(this));

对于一个生成的 GridView,你需要:

GridView gridView = new GridView(this);
gridView.setNumColumns(4); /* etc */
setContentView(gridview);
gridview.setAdapter(new MyAdapter(this));

看到任何东西。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接