GridView详解
来源:互联网 发布:c语言常考题 编辑:程序博客网 时间:2024/06/08 07:39
- GridView基本使用方法
- GridView的属性和方法详解
GridView基本使用方法
GridView是一个在二维可滚动的网格中展示内容的控件。网格中的内容通过使用adapter
自动插入到布局中。
下面通过实现一个简单的显示省份名的demo,介绍GridView控件的基本使用方法:
在布局中使用GridView控件,实现activity_main.xml
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.sunxiaodong.androidgridview.MainActivity"> <GridView android:id="@+id/grid_view" android:layout_width="match_parent" android:layout_height="match_parent" android:columnWidth="90dp" android:gravity="center" android:horizontalSpacing="10dp" android:numColumns="auto_fit" android:stretchMode="columnWidth" android:verticalSpacing="10dp" /></RelativeLayout>
这个GridView会填充满整个屏幕,关于使用属性的说明,在下一节“GridView主要属性详解”中将进行说明。
MainActivity.java中,获取GridView控件,并进行初始化设置
public class MainActivity extends AppCompatActivity { private GridView mGridView; private ProvinceAdapter mProvinceAdapter; private String[] provinceNames = new String[]{"北京", "上海", "广东", "广西", "天津", "重庆", "湖北", "湖南", "河北", "河南", "山东"}; private int[] bgColor = new int[]{R.color.color_00ff00, R.color.color_ff0000, R.color.color_ff0000, R.color.color_ffff00, R.color.color_8e35ef, R.color.color_303F9F, R.color.color_00ff00, R.color.color_ff0000, R.color.color_ff0000, R.color.color_ffff00, R.color.color_8e35ef}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { mGridView = (GridView) this.findViewById(R.id.grid_view); List<ProvinceBean> provinceBeanList = new ArrayList<>(); for (int i = 0; i < provinceNames.length; i++) { ProvinceBean provinceBean = new ProvinceBean(); provinceBean.setName(provinceNames[i]); provinceBean.setColor(bgColor[i]); provinceBeanList.add(provinceBean); } mProvinceAdapter = new ProvinceAdapter(this, provinceBeanList); mGridView.setAdapter(mProvinceAdapter); }}
程序中,首先使用findViewById
方法获取到了GridView控件,接下来使用setAdapter
方法给它设置提供数据的适配器。程序中,引入了两份数据provinceNames 和bgColor,其中provinceNames定义了依次显示在GridView各网格中的省份名称,bgColor定义了依次显示在GridView网格中的省份名称的背景色,这些只是为了更方便读者从视觉上认识GridView。
创建ProvinceAdapter.java文件,实现数据在GridView中的展示
public class ProvinceAdapter extends BaseAdapter { private List<ProvinceBean> provinceBeanList; private LayoutInflater layoutInflater; public ProvinceAdapter(Context context, List<ProvinceBean> provinceBeanList) { this.provinceBeanList = provinceBeanList; layoutInflater = LayoutInflater.from(context); } @Override public int getCount() { return provinceBeanList.size(); } @Override public Object getItem(int position) { return provinceBeanList.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { convertView = layoutInflater.inflate(R.layout.province_grid_view_item_layout, null); holder = new ViewHolder(); holder.text = (TextView) convertView.findViewById(R.id.text); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } ProvinceBean provinceBean = provinceBeanList.get(position); if (provinceBean != null) { holder.text.setText(provinceBean.getName()); holder.text.setBackgroundResource(provinceBean.getColor()); } return convertView; } class ViewHolder { TextView text; }}
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,则新建视图,否则直接复用视图。
上面程序的执行效果如下图所示:
GridView的属性和方法详解
GridView的主要属性
android:columnWidth
相关方法setColumnWidth(int)
。定义每一列的固定宽度。
必须是dimension值(浮点数后面拼接单位,例如“14.5sp”)。有效的单位有:px,dp,sp,in,mm。
它也可以是一个资源的引用(@[package:]type:name)或主题属性(?[package:][type:]name)。android:gravity
相关方法setGravity(int)
。定义每一个单元格的重心。
必须是一个或多个(使用“|”分隔)下面的常量
android:horizontalSpacing
相关方法setHorizontalSpacing(int)
。定义了两列之间的水平间隔。
属性设置要求同android:columnWidth
android:numColumns
相关方法setNumColumns(int)
。定义了展示的列数。
可以是一个整形值,如“100”。也可以是一个资源的引用(@[package:]type:name)或主题属性(?[package:][type:]name)。或者下面的这个常量:
android:stretchMode
相关方法setStretchMode(int)
。定义了列拓展填充有限闲置空间的方式。
必须是下面常量值中的一个:
android:verticalSpacing
相关方法setVerticalSpacing(int)
。定义两行之间的垂直间隔。
属性设置要求同android:columnWidth
GridView的主要方法
Public方法
ListAdapter:getAdapter()
返回关联的Adapterint:getColumnWidth()
返回列的宽度int:getGravity()
返回描述子视图被放置的方式的标识。默认为Gravity.LEFT
。int:getHorizontalSpacing()
返回列间的水平间隔大小。
仅会计算当前布局。如果调用了setHorizontalSpacing(int)
来设置间隔,但布局还没有完成,这个方法会返回一个旧值。如果想要明确地获取这个间隔,使用getRequestedHorizontalSpacing()
方法请求。int:getNumColumns()
返回列数。如果网格没有被布局,则返回AUTO_FIT
。int:getRequestedColumnWidth()
返回请求的列宽度。
这可能不是真实的列宽度。使用getColumnWidth()
获取当前真实的列宽度。int:getRequestedHorizontalSpacing()
返回请求的列间的水平间隔。
这个值可能是布局期间的局部样式,也可能是默认的样式,或是使用setHorizontalSpacing(int)
方法设置的值。如果布局尚未完成或GridView计算得到了一个和请求的不同的水平间隔,它与getHorizontalSpacing()
将有不同的返回值。int:getStretchMode()
返回扩展模式。int:getVerticalSpacing()
返回行间的垂直间隔。onInitializeAccessibilityNodeInfoForItem(View view, int position, AccessibilityNodeInfo info)
使用列表中实际项的信息初始化一个AccessibilityNodeInfo
。
boolean:onKeyDown(int keyCode, KeyEvent event)
KeyEvent.Callback.onKeyDown()
的默认实现:如果视图可点击,当KEYCODE_DPAD_CENTER
或KEYCODE_ENTER
被释放时,执行视图按下事件。
软键盘上的按键事件通常不会触发这个监听,尽管有些条件下可能会触发,但不要依赖它去捕获关键盘按键事件。
返回值:处理返回true,否则返回false。boolean:onKeyMultiple(int keyCode, int repeatCount, KeyEvent event)
KeyEvent.Callback.onKeyMultiple()
的默认实现:一直返回false。
软键盘上的按键事件通常不会触发这个监听,尽管有些条件下可能会触发,但不要依赖它去捕获关键盘按键事件。
返回值:处理返回true,否则返回false。boolean:onKeyUp(int keyCode, KeyEvent event)
KeyEvent.Callback.onKeyUp()
的默认实现:当KEYCODE_DPAD_CENTER
或KEYCODE_ENTER
被释放时,执行视图点击事件。
软键盘上的按键事件通常不会触发这个监听,尽管有些条件下可能会触发,但不要依赖它去捕获关键盘按键事件。
返回值:处理返回true,否则返回false。setAdapter(ListAdapter adapter)
为GridView设置数据。setColumnWidth(int columnWidth)
设置宽度。setGravity(int gravity)
设置网格的中重心。重心描述了子视图的摆放方式。默认是Gravity.LEFT
。setHorizontalSpacing(int horizontalSpacing)
设置列间的水平间隔。setNumColumns(int numColumns)
设置列数。setRemoteViewsAdapter(Intent intent)
设置该AbsListView使用远程视图适配器,该适配器通过特定的Intent连接到一个RemoteViewsService。setSelection(int position)
设置当前选中项。setStretchMode(int stretchMode)
设置列表项如何拓展填充闲置空间的方式。
可以设置下面常量值中的一个:
setVerticalSpacing(int verticalSpacing)
设置行间的垂直间隔。smoothScrollByOffset(int offset)
平滑地滚动到具体的适配器位置的偏移位置。视图会滚动到指定位置显示出来。smoothScrollToPosition(int position)
平滑地滚动到具体的适配器位置。视图会滚动到指定位置显示出来。
Protected方法
attachLayoutAnimationParameters(View child, ViewGroup.LayoutParams params, int index, int count)
子视图可以覆写该方法来在提供的child上设置布局动画参数。
computeVerticalScrollExtent()
计算滚动条把手在纵向滚动范围内占用的幅度。该值用于计算滚动条把手在滚动条滑道中的长度。
范围使用与computeVerticalScrollRange()
和computeVerticalScrollOffset()
相同的任意单位。
默认的长度是视图的可绘制高度。
返回值:滚动条把手在纵向滚动范围内占用的幅度。computeVerticalScrollOffset()
计算滚动条把手在纵向滚动范围内的位置。该值用于计算滚动条把手在滚动条滑道中的位置。
范围使用与computeVerticalScrollRange()
和computeVerticalScrollExtent()
相同的任意单位。
默认位置是视图的滚动条位置。
返回值:滚动条把手的纵向位置computeVerticalScrollRange()
计算垂直滚动条的垂直范围。
范围使用与computeVerticalScrollExtent()
和computeVerticalScrollOffset()
相同的任意单位。
返回值:纵向滚动条代表的整个纵向范围。默认纵向范围时视图的绘制高度。layoutChildren()
子类必须实现该方法,来布局子视图onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect)
当视图焦点状态改变时,视图系统调用该方法。由定向导航导致的焦点变更时,direction和previouslyFocusedRect提供了焦点是从那里来的进一步信息。
onMeasure(int widthMeasureSpec, int heightMeasureSpec)
对视图及其内容进行测量,来决定布局的宽和高。
源码地址
- GridView详解
- gridview详解
- Gridview详解
- GridView详解
- GridView详解
- 详解GridView
- [GridView控件]事件详解
- Gridview控件使用详解
- [GridView控件]事件详解
- GridView的用法详解
- [GridView控件]事件详解
- GridView用法详解
- GridView内容详解(1)
- GridView控件事件详解
- GridView事件详解
- Gridview控件详解
- GridView内容详解(转载)
- [GridView控件]事件详解
- C++ 类成员的可访问范围
- 设计模式之工厂三姐妹解读(三)
- C++ 11 查看硬件线程个数等信息
- 内联成员函数和重载成员函数
- 解决Ubuntu 14.04 grub选择启动项 10秒等待时间
- GridView详解
- 二叉树系列7:判断整数序列是不是二叉搜索树的后序遍历结果
- android Drawable小结
- Python入门 之 切片
- smart pointer
- 设计模式之工厂三姐妹解读(四)
- jsp+tomcat+ 创建工程 配置工程
- 二叉树系列6:非递归遍历
- 构造函数