发布时间:2025-12-09 17:51:34 浏览次数:4
GridView是一个在二维可滚动的网格中展示内容的控件。网格中的内容通过使用adapter自动插入到布局中。
下面通过实现一个简单的显示省份名的demo,介绍GridView控件的基本使用方法:
这个GridView会填充满整个屏幕,关于使用属性的说明,在下一节“GridView主要属性详解”中将进行说明。
程序中,首先使用findViewById方法获取到了GridView控件,接下来使用setAdapter方法给它设置提供数据的适配器。程序中,引入了两份数据provinceNames 和bgColor,其中provinceNames定义了依次显示在GridView各网格中的省份名称,bgColor定义了依次显示在GridView网格中的省份名称的背景色,这些只是为了更方便读者从视觉上认识GridView。
province_grid_view_item_layout.xml:
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/text"android:layout_width="90dp"android:layout_height="90dp"/></LinearLayout>ProvinceBean.class:
public class ProvinceBean {String name;int color;public ProvinceBean(){}public ProvinceBean(String name, int color) {this.name = name;this.color = color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getColor() {return color;}public void setColor(int color) {this.color = color;}}ProvinceAdapter继承自BaseAdapter,有几个必须实现的方法getCount(),getItem(int position),getItemId(int position)和getView(int position, View convertView, ViewGroup parent)。其中,getCount()返回需要展示的GridView的项数。getItem(int position)返回给定位置的数据对象。getItemId(int position)返回该项的行id。getView(int position, View convertView, ViewGroup parent)是必须要实现的方法,该方法控制GridView中数据项的显示,方法中的convertView视图是被复用的视图,在实现时对其进行判断,如果为null,则新建视图,否则直接复用视图。
上面程序的执行效果如下图所示:
| top | 0x30 | 将对象放在它的容器的顶部,不会改变它的大小 |
| bottom | 0x50 | 将对象放在它的容器的底部,不会改变它的大小 |
| left | 0x03 | 将对象放在它的容器的左面,不会改变它的大小 |
| right | 0x05 | 将对象放在它的容器的右面,不会改变它的大小 |
| center_vertical | 0x10 | 将对象放在它的容器垂直方向的中心,不会改变它的大小 |
| fill_vertical | 0x70 | 如果需要改变对象的垂直大小以完全填充它的容器 |
| center_horizontal | 0x01 | 将对象放在它的容器水平方向的中心,不会改变它的大小 |
| fill_horizontal | 0x07 | 如果需要改变对象的水平大小以完全填充它的容器 |
| center | 0x11 | 将对象放在它的容器的中心,不会改变它的大小 |
| fill | 0x77 | 如果需要改变对象的水平和垂直方向的大小以完全填充它的容器 |
| clip_vertical | 0x80 | 附加选项被设置用来将子视图的上面或下面边缘裁剪到它的容器的边界。这个裁剪基于垂直方向的重心:top重心将会裁剪底部边缘,bottom重心将会裁剪顶部边缘,不会同时裁剪两边 |
| clip_horizontal | 0x08 | 附加选项被设置用来将子视图的左面或右面边缘裁剪到它的容器的边界。这个裁剪基于水平方向的重心:left重心将会裁剪右面边缘,right重心将会裁剪左面边缘,不会同时裁剪两边 |
| start | 0x00800003 | 将对象放在它的容器的起始位置,不会改变它的大小 |
| end | 0x00800005 | 将对象放在它的容器的末尾位置,不会改变它的大小 |
| auto_fit | -1 | 在有效空间展示尽量多的列数 |
| none | 0 | 扩展无效 |
| spacingWidth | 1 | 列与列之间的空间被扩展 |
| columnWidth | 2 | 每一列被相等的拓展 |
| spacingWidthUniform | 3 | 列与列之间的空间被均匀的扩展 |
| View | 呈现列表项的视图 |
| position | 在Adapter中列表项的位置 |
| info | 需要初始化的信息项(Node Info) |
| NO_STRETCH | 0 | 扩展无效 |
| STRETCH_COLUMN_WIDTH | 2 | 扩展列 |
| STRETCH_SPACING | 1 | 扩展列间的空间 |
| STRETCH_SPACING_UNIFORM | 3 | 均匀地扩展列间的空间 |
| child | 和动画参数关联的子视图 |
| params | 持有动画参数的子视图的布局参数 |
| index | 子视图在视图组中的索引 |
| count | 视图组中子视图的数量 |
| gainFocus | 如果视图具有焦点,值为真;否则为假 |
| direction | 当调用requestFocus()为该视图设置焦点时,该值为焦点移动的方向。其值为FOCUS_UP、FOCUS_DOWN、FOCUS_LEFT或者FOCUS_RIGHT |
| previouslyFocusedRect | 失去焦点的视图的矩形坐标,使用该视图的坐标系统.如果指定了,它将传入可以知道焦点来自哪里的详细信息(作为对direction 的补充)。否则,其值为null |