android开发步步为营之35:GridView的用法

之前使用asp.net开发软件的过程中也使用GridView,发现android里面也有这么一个控件,使用方法有点相似,都是使用适配器将数据绑定到这个控件,然后将数据展示出来,应该说它和ListView一样,是个非常常用的控件,所以我们应该学习如何使用它,理论知识是没多少的,就是一个展示数据的控件,继承关系如下:

public class GridView

extends AbsListView

java.lang.Object

android.view.View

android.view.ViewGroup

android.widget.AdapterView<T extends android.widget.Adapter>

android.widget.AbsListView

android.widget.GridView

开始我们的范例:

本范例,我们要实现两种效果:

第一种显示小狗的图片列表,点击图片后触发一个提示消息

第二种显示水浒梁山好汉的头像、姓名、年龄信息,点击一行后会在title显示姓名

第一步、设计页面

res\layout\gridview.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical" android:layout_width="fill_parent"

android:layout_height="fill_parent">

<GridView android:id="@+id/mygridview" android:layout_width="fill_parent"

android:layout_height="fill_parent" android:columnWidth="90dp"

android:numColumns="auto_fit" android:horizontalSpacing="10dp"

android:verticalSpacing="10dp" android:stretchMode="columnWidth"

android:gravity="center">

</GridView>

</RelativeLayout>

res\layout\personview.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent">

<ImageView android:id="@+id/imgHead" android:layout_width="wrap_content" android:src="@drawable/icon" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_alignParentLeft="true"></ImageView>

<TextView android:id="@+id/tvName" android:text="姓名" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignBottom="@+id/imgHead" android:layout_toRightOf="@+id/imgHead" android:layout_marginLeft="40dp" android:layout_marginBottom="14dp"></TextView>

<TextView android:id="@+id/tvAge" android:text="年龄" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignTop="@+id/tvName" android:layout_toRightOf="@+id/tvName" android:layout_marginLeft="68dp"></TextView>

</RelativeLayout>

第二步、设计Activity  GridViewActivity.java

/**

* gridview的用法

*/

package com.figo.helloworld;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import java.util.Map;

import android.app.Activity;

import android.content.Context;

import android.os.Bundle;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.AdapterView;

import android.widget.AdapterView.OnItemClickListener;

import android.widget.BaseAdapter;

import android.widget.GridView;

import android.widget.ImageView;

import android.widget.SimpleAdapter;

import android.widget.Toast;

/**

* @author zhuzhifei

*

*/

public class GridViewActivity extends Activity {

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.gridview);

//给gv装配数据

GridView gridView = (GridView) findViewById(R.id.mygridview);

//使用系统视图ImageView

//     gridView.setAdapter(new ImageAdapter(this));

//     gridView.setColumnWidth(90);

//      // 添加点击行事件

//     gridView.setOnItemClickListener(new OnItemClickListener() {

//     @Override

//     public void onItemClick(AdapterView parent, View view,

//            int position, long id) {

//         Toast.makeText(GridViewActivity.this, "dog"+id+"汪汪汪",

//                Toast.LENGTH_SHORT).show();

//

//     }

//  });

//使用简单适配器显示图片+文字

SimpleAdapter adapter = getSimpleAdapter();

gridView.setAdapter(adapter);

gridView.setColumnWidth(200);

// 添加点击行事件

gridView.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view, int position, long id) {

// 在本例中arg2=arg3

Map<String, Object> item = (Map<String, Object>) parent.getItemAtPosition(position);

// 显示所选Item的ItemText

setTitle(item.get("name").toString());

}

});

}

/**

* 简单适配器   显示图片+文字

*

* @return

*/

private SimpleAdapter getSimpleAdapter() {

// 生成动态数组,并且转入数据

List<Map<String, Object>> list = new ArrayList<Map<String, Object>>();

Map<String, Object> map = new HashMap<String, Object>();

map.put("name", "宋江");

map.put("age", "33岁");

map.put("img", R.drawable.icon);

list.add(map);

map = new HashMap<String, Object>();

map.put("name", "卢俊义");

map.put("age", "32岁");

map.put("img", R.drawable.icon);

list.add(map);

map = new HashMap<String, Object>();

map.put("name", "关胜");

map.put("age", "28岁");

map.put("img", R.drawable.icon);

list.add(map);

map = new HashMap<String, Object>();

map.put("name", "林冲");

map.put("age", "30岁");

map.put("img", R.drawable.icon);

list.add(map);

map.put("name", "吴用");

map.put("age", "33岁");

map.put("img", R.drawable.icon);

list.add(map);

map = new HashMap<String, Object>();

map.put("name", "武松");

map.put("age", "32岁");

map.put("img", R.drawable.icon);

list.add(map);

map = new HashMap<String, Object>();

map.put("name", "公孙胜");

map.put("age", "28岁");

map.put("img", R.drawable.icon);

list.add(map);

map = new HashMap<String, Object>();

map.put("name", "花荣");

map.put("age", "30岁");

map.put("img", R.drawable.icon);

list.add(map);

// 生成适配器

SimpleAdapter adapter = new SimpleAdapter(this, list,

R.layout.personview, new String[] { "img",

"name","age" }, new int[] { R.id.imgHead,

R.id.tvName,R.id.tvAge });

return adapter;

}

//图片适配器

private class ImageAdapter extends BaseAdapter {

private Context mContext;

private LayoutInflater mInflater;

private List<Map<String, Object>> mData;

// 狗狗图片id集合

private Integer[] mDogs = { R.drawable.doga, R.drawable.dogb,

R.drawable.dogc, R.drawable.dogz, R.drawable.dogf, R.drawable.dogr,

R.drawable.dogl, R.drawable.dogv, R.drawable.dogu,

R.drawable.dogj,R.drawable.dogk,R.drawable.dogm,

R.drawable.dogo,R.drawable.dogs,R.drawable.dogw

};

public ImageAdapter(Context context) {

this.mContext = context;

}

@Override

public int getCount() {

return mDogs.length;

}

@Override

public Object getItem(int position) {

return mDogs[position];

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public View getView(int position, View convertView, ViewGroup parent) {

//使用图片 其实这里也可以使用TextView

ImageView imageView;

if (convertView == null) {

imageView = new ImageView(mContext);

imageView.setLayoutParams(new GridView.LayoutParams(85, 85));

imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);

imageView.setPadding(8, 8, 8, 8);

} else {

imageView = (ImageView) convertView;

}

imageView.setImageResource(mDogs[position]);

return imageView;

}

}

}

第四步、运行效果

时间: 2024-10-10 04:01:27

android开发步步为营之35:GridView的用法的相关文章

android开发步步为营之63:webview常用用法

webview是常用的组件,特别是当前h5这么流行的情况下,本文介绍webview在项目中的常规用法.一般是webview加载的过程前会对当前网络做判断,没有网络的情况下给个提示.有网络的情况下配一个progressbar显示当前进度,好的,上代码.       第一步:设计页面 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schem

Android开发:ScrollView嵌套GridView的解决办法

Android开发:ScrollView嵌套GridView的解决办法 前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便会出问题,即GridView会显示不全. 解决办法,自定义一个GridView控件 public class MyGridView extends GridView {      public MyGridView(Context context, AttributeSet attrs) {      

android开发步步为营之31:TabActivity的用法Tab显示在底部

Tab标签页是一个非常常用的控件,.net里面就有multipage+tabstrip组合通过标签的切换实现页面的切换,同理html里面我们常用frameset来实现,android里面我们则通过使用FrameLayout+TabWidget, FrameLayout里面装载xml页面,TabWidget显示标签,点击标签跳转到相关的activity或者view. public class TabActivity extends ActivityGroup的详细继承关系如下: java.lang

android开发步步为营之34:四大组件之ContentProvider

ContentProvider,从字面意义上理解,内容提供者,这个类目的就是一个桥梁的作用,让一个应用的数据(SQLiteDatabase, SharedPreferences,Xml,Txt等数据),通过ContentProvider可以让其他的应用访问. 理论知识 (一).ContentProvider简介 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.虽然使用其他方法也可以对外共享数据,但数据访问方式会因数据存储的方式而不同

android开发步步为营之56:Android开发技术点总结(持续更新)

1.eclipse svn插件下载 http://subclipse.tigris.org/update_1.6.x http://subclipse.tigris.org/update_1.8.x 64位机器 http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA 2.eclipse常用插件下载 http://blog.csdn.net/jackiehff/article/details/8181945 3.unico

android开发步步为营之70:android接入Google Analytics总结

求人不如求己,今天项目里要接入Google Analytics,这个是做应用统计分析用的,可以查看当前手机活跃用户,事件点击等等数据,先看看效果: 之前eclipse里面接入已经成功,昨天项目组决定项目转成使用android studio来开发,看google官方文档,官方文档https://developers.google.com/analytics/devguides/collection/android/v4/,然后官方文档里面的配置文件是用google-services.json的,这

android开发步步为营之20:网络设置

网络设置这块在手机应用里面是非常重要的一块,因为一般应用都需要和外部网络做交互的.本篇文章就展示了一个比较经典应用场景.比如我最近在开发的转账应用.这个是需要和网络交互的.当用户打开应用之后,应用首先会判断用户是否已经打开wifi或者gprs网络.没有则跳转到系统的无线和网络设置界面,当用户设置好了之后,我这里做了一个更人性化的处理,创建了一个广播接收器,因为我们知道,手机在打开网络或者收到短信的时候,都会对外发布一条广播.一旦网络连接上了之后,我的这个广播接收器,就会收到信息,然后判断当前的转

android开发步步为营之58:给图片绘制圆形气泡背景效果

最近在开发项目的时候,有一个需求,需要给应用图标绘制圆形气泡背景,有了彩色气泡这样显得漂亮一点,气泡的颜色是应用图标的颜色均值,先看看效果,然后,我再给出demo. demo应用图标是这样的: 添加气泡背景后是这样的: 仔细看圆形背景颜色是图标颜色的均值. 好的,下面我们来完成这个demo. 第一步.编写页面activity_drawcycle.xml <?xml version="1.0" encoding="utf-8"?> <LinearLa

android开发步步为营之68:Facebook原生广告接入总结

开发应用的目的是干嘛?一方面当然是提供优质服务给用户,还有一方面最重要的还是须要有盈利.不然谁还有动力花钱花时间去开发app? 我们的应用主攻海外市场,所以主要还是接入国外的广告提供商.本文就今天刚完毕接入facebook原生广告功能,介绍一下怎样接入fb的原生广告.供大家參考.         第一步:申请接入账号(须要FQ) https://developers.facebook.com/docs/audience-network/getting-started#company_info h