android学习日记16--GridView(网格视图)
一、GridView
1、简述
GridView按照行列来显示图片或文本的一种视图,排列其实有点类似TableLayout布局,
不过和TableLayout还是差别很大的,倒比较像二维的ListView。位于android.widget包下,常常用来实现类似九宫格的图像。
实现手法和ListView有点相似,用Apapter把数据绑定到控件上,为容器提供子视图,利用视图的数据和元数据来构建每个子视图自定义Adapter显示。
如果需要自定义适配器 可以扩展抽象类BaseAdapter。
2、常用属性和对应方法如下:
下面用实例化SimpleAdapter和继承抽象类BaseAdapter方法实现下图的例子:
3、实例化SimpleAdapter实现
Activity代码:
private GridView gv;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.gridview); //准备要添加的数据条目
List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();
for (int i = 0; i < 9; i++) {
Map<String, Object> item = new HashMap<String, Object>();
item.put("imageItem", R.drawable.ic_launcher);//添加图像资源的ID
item.put("textItem", "icon" + i);//按序号添加ItemText
items.add(item);
} //实例化SimpleAdapter适配器
SimpleAdapter adapter = new SimpleAdapter(this,
items,
R.layout.grid_item,
new String[]{"imageItem", "textItem"},
new int[]{R.id.image_item, R.id.text_item}); //获得GridView实例
gv = (GridView)findViewById(R.id.mygridview);
//为GridView设置适配器
gv.setAdapter(adapter); }
单个组件XML:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:paddingBottom="6dip"
>
<ImageView
android:id="@+id/image_item"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:src="@drawable/ic_launcher"
/>
<TextView
android:id="@+id/text_item"
android:layout_below="@+id/image_item"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_centerHorizontal="true"
/>
</RelativeLayout>
页面主布局XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
>
<GridView
android:id="@+id/mygridview"
android:numColumns="3"
android:gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:stretchMode="columnWidth"
/>
</LinearLayout>
4、继承抽象类BaseAdapter实现
替换成自己GridAdapter代码:
// //准备要添加的数据条目
// List<Map<String, Object>> items = new ArrayList<Map<String,Object>>();
// for (int i = 0; i < 9; i++) {
// Map<String, Object> item = new HashMap<String, Object>();
// item.put("imageItem", R.drawable.ic_launcher);//添加图像资源的ID
// item.put("textItem", "icon" + i);//按序号添加ItemText
// items.add(item);
// }
//
// //实例化SimpleAdapter适配器
// SimpleAdapter adapter = new SimpleAdapter(this,
// items,
// R.layout.grid_item,
// new String[]{"imageItem", "textItem"},
// new int[]{R.id.image_item, R.id.text_item}); List<GridInfo> list = new ArrayList<GridInfo>();
for (int i = 0; i < 9; i++) {
list.add(new GridInfo("icon"+i));
} GridAdapter adapter = new GridAdapter(this);
adapter.setList(list);
补上GridAdapter代码:
public class GridAdapter extends BaseAdapter { private class GridHolder {
ImageView appImage;
TextView appName;
} private Context context; private List<GridInfo> list;
private LayoutInflater mInflater; public GridAdapter(Context c) {
super();
this.context = c;
} public void setList(List<GridInfo> list) {
this.list = list;
mInflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount() {
// TODO Auto-generated method stub
return list.size();
} @Override
public Object getItem(int index) { return list.get(index);
} @Override
public long getItemId(int index) {
return index;
} @Override
public View getView(int index, View convertView, ViewGroup parent) {
GridHolder holder;
if (convertView == null) {
convertView = mInflater.inflate(R.layout.grid_item, null);
holder = new GridHolder();
holder.appImage = (ImageView)convertView.findViewById(R.id.image_item);
holder.appName = (TextView)convertView.findViewById(R.id.text_item);
convertView.setTag(holder); }else{
holder = (GridHolder) convertView.getTag(); }
GridInfo info = list.get(index);
if (info != null) {
holder.appName.setText(info.getName());
}
return convertView;
} }
比较麻烦还是重写getView()方法。里面的GridInfo只是普通的JAVA bean类。
android学习日记16--GridView(网格视图)的更多相关文章
- Android学习笔记27:网格视图GridView的使用
网格视图GridView的排列方式与矩阵类似,当屏幕上有很多元素(文字.图片或其他元素)需要按矩阵格式进行显示时,就可以使用GridView控件来实现. 本文将以一个具体的实例来说明如何使用GridV ...
- Android开发10.3:UI组件GridView网格视图
GridView(网格视图) 概述 GridView用于在界面上按行.列分布的方式来显示多个组件 GridView和ListView有共同的父类 : AbsListView ...
- android学习日记05--Activity间的跳转Intent实现
Activity间的跳转 Android中的Activity就是Android应用与用户的接口,所以了解Activity间的跳转还是必要的.在 Android 中,不同的 Activity 实例可能运 ...
- android学习日记03--常用控件Dialog
常用控件 9.Dialog 我们经常会需要在Android界面上弹出一些对话框,比如询问用户或者让用户选择.这些功能我们叫它Android Dialog对话框 对话框,要创建对话框之前首先要创建Bui ...
- android学习日记03--常用控件checkbox/radiobutton
常用控件3.checkbox 复选框,确定是否勾选,点击一下勾选,点击第二下取消,当有一系列备选项时适合用checkbox控件,方便用户提交数据. 贴上例子Activity的java代码 packag ...
- android学习日记03--常用控件button/imagebutton
常用控件 控件是对数据和方法的封装.控件可以有自己的属性和方法.属性是控件数据的简单访问者.方法则是控件的一些简单而可见的功能.所有控件都是继承View类 介绍android原生提供几种常用的控件bu ...
- Android课程---关于GridView网格视图的学习
activity_ui6.xml <?xml version="1.0" encoding="utf-8"?> <GridView xmlns ...
- android学习日记06--View视图
一.android 界面开发 1.三个重要的类:View视图.Canvas画布.Paint画笔2.android 界面开发常用三种视图 View --只能在主线程中更新,没有缓存 ...
- android学习日记18--Adapter简介
一.Adapter 1.简述 最近学的GridView和Gallery 都有用到Adapter适配器,发现它貌似蛮重要的.专门上网搜了下有关Adapter的资料.android绝大多数应用是JAVA语 ...
随机推荐
- bzoj1057,poj3250
bzoj1057本质上是求最大子矩阵: 第一问是一个经典的O(n2)dp 第二问就是最大子矩阵,回眸一下当年卡了我很久的问题: 首先穷举显然不行(这不废话吗?): 首先我们预处理每个点可以最大向上延展 ...
- webstorm使用教程--主题设置
1. 代码字体设置 :注意需要另存为 Scheme name一个才可以修改Editor Font. 字体设置:Editor->Color & Fonts->Font 2. 界面字体 ...
- WCF HTTPS配置
昨天需要把做好的一个wcf服务发布到服务器站点下的一个虚拟目录中发布过程遇到了一个问题:服务器上的环境是https,因此需要多对配置文件修改于是在网上找啊找,遇到一个问题找一个问题,可是问题依然没解决 ...
- [selenium webdriver Java]显示的等待同步
显示等待可以在执行下一次操作时,自定义等待条件 显示的等待只需要执行在需要同步的地方而不影响脚本的其他地方 Selenium WebDriver提供了WebDriverWait和ExpectedCon ...
- [JDBC-1] JDBC Base Template
以Statement建立的标准模板: static void template() throws Exception { Connection conn = null; Statement st = ...
- Zabbix探索:Proxy没有回传任何数据
因为Zabbix使用Puppet搭建的,实际上是通过脚本安装的,为了偷懒,将脚本都写一块去了,后来发现Proxy的配置和Zabbix的配置不同,又偷懒一次,复制了一下,但是为了调整脚本使用的便捷性,将 ...
- tRNAscan-SE
tRNAscan-SE是一款可以在基因组上扫描tRNA的序列,也就是说你给定一组基因序列(fasta数据格式),可以用这个软件去预测这个序列是不是tRNA.具体的实现原理,我不搞生物,所以也就不太明白 ...
- 【hdu3065】病毒侵袭持续中
题意: 求目标串中每个模式串出现几次 目标串长度<=2000000 模式串<=1000个 模式串长度<=50 题解: 这不就是AC自动机的模板题吗! 求fail树中模式串的子树中有几 ...
- mybatis代码生成器配置文件详解
mybatis代码生成器配置文件详解 更多详见 http://generator.sturgeon.mopaas.com/index.html http://generator.sturgeon.mo ...
- A Tour of Go Switch with no condition
Switch without a condition is the same as switch true. This construct can be a clean way to write lo ...