Android入门(13)——GridView使用汇总

原创 2015年07月06日 20:11:08

1. GridView用于在界面上按行、列分布的方式来显示多个组件,与ListView的区别是,它可以显示类似表格的样式,而后者是一行一行的。

 


 

2. 课程目标:关于适配器SimpleAdapter。

 


 

3. 具体实现,这里先设置适配器,将数据源的内容加载到GridView中:

 

第一步:新建一个名叫item的布局文件来设置GridView中每一项的布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center" 
    android:background="#000000">
    
    <ImageView 
        android:src="@drawable/ic_launcher"
        android:layout_width="60dp"
        android:layout_height="60dp"
        android:id="@+id/image"
        />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/text"
        android:layout_marginTop="5dp"
        android:textColor="#ffffff"
        android:text="文字"
        />


</LinearLayout>
第二步:设置MainActivity文件:

package com.example.grideview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.widget.GridView;
import android.widget.SimpleAdapter;

public class MainActivity extends Activity {

	private GridView gridView;
	private List<Map<String,Object>>dataList;
	private int[] icon={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,// 这里暂且就用相同的图片了。
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
	private String[] iconname = {"通讯录","日历","照相机","时钟","游戏","短信","铃声",
			"设置","语音","天气","浏览器","视频"};
	private SimpleAdapter adapter;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        gridView = (GridView) findViewById(R.id.gridView);
        /*
         * 1.准备数据源
         * 2.新建适配器(SimpleAdapter)
         * 3.GridView加载适配器
         * 4.GridView配置事件监听器(OnItemClickListener)
         * */ 
        dataList = new ArrayList<Map<String,Object>>();
        // getData(); 和下面这个函数中的重复了
        adapter = new SimpleAdapter(
        		this, 				// 上下文
        		getData(), 			// 数据源
        		R.layout.item, 			// 单个项布局文件
        		new String[]{"image","text"}, 	// from:给布局文件中的控件设置的Map中的键名
        		new int[]{R.id.image,R.id.text}	// to:对应的是布局文件中的控件的id
        		);
        gridView.setAdapter(adapter);
    }

	private List<Map<String,Object>> getData() {
		// 
		for(int i=0; i<icon.length; i++){
			Map<String, Object> map = new HashMap<String,Object>();
			map.put("image",icon[i]);
			map.put("text", iconname[i]);
			dataList.add(map);
		}
		
		return dataList;
	}

}
那么目前位置的效果是这样的:

哈哈,是不是很逗很可爱!原因是GridView属性还没有配置好。


4. 设置属性:

首先,去掉软件头部导航条:去AndroidManifest中给application修改theme属性:

android:theme="@android:style/Theme.Black.NoTitleBar" 
然后,是GridView的属性:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    
<!-- 
android:numColumns=""   每一行显示的列数,auto_fit自动适应,制定列数的时候列间距就会失效。
        android:horizontalSpacing="" 两列之间的间距
        android:verticalSpacing=""  两行之间的间距
 -->
    <GridView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/gridView"
        
        android:numColumns="3"
        android:horizontalSpacing="10dp"
        android:verticalSpacing="10dp"
        android:layout_marginTop="10dp"
        />
    
</LinearLayout>

那现在的效果是这样的:



5. 设置监听事件:

用接口的方式实现:

package com.example.grideview;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

public class MainActivity extends Activity implements OnItemClickListener{

	private GridView gridView;
	private List<Map<String,Object>>dataList;
	private int[] icon={R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher,
			R.drawable.ic_launcher,R.drawable.ic_launcher,R.drawable.ic_launcher};
	private String[] iconname = {"通讯录","日历","照相机","时钟","游戏","短信","铃声",
			"设置","语音","天气","浏览器","视频"};
	private SimpleAdapter adapter;
	
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        gridView = (GridView) findViewById(R.id.gridView);
        /*
         * 1.准备数据源
         * 2.新建适配器(SimpleAdapter)
         * 3.GridView加载适配器
         * 4.GridView配置事件监听器(OnItemClickListener)
         * */ 
        dataList = new ArrayList<Map<String,Object>>();
        adapter = new SimpleAdapter(
        		this, 				// 上下文
        		getData(), 			// 数据源
        		R.layout.item, 			// 单个项布局文件
        		new String[]{"image","text"}, 	// from:对应的是Map中的键名
        		new int[]{R.id.image,R.id.text}	// to:对应的是布局文件中的控件的id
        		);
        gridView.setAdapter(adapter);
        gridView.setOnItemClickListener(this);
    }

	private List<Map<String,Object>> getData() {
		// 
		for(int i=0; i<icon.length; i++){
			Map<String, Object> map = new HashMap<String,Object>();
			map.put("image",icon[i]);
			map.put("text", iconname[i]);
			dataList.add(map);
		}
		
		return dataList;
	}

	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
		// position从0开始的。
		Toast.makeText(this, "我是"+iconname[position], Toast.LENGTH_SHORT).show();
	}

}
效果图:

哈哈,本章结束。



可以参考一下ListView的使用方法:ListView使用汇总






版权声明:本文为博主原创文章,未经博主允许不得转载。

GridView对数据小类进行分别汇总

protected void Page_Load(object sender, EventArgs e) { System.D
  • gongth_12
  • gongth_12
  • 2013年07月01日 08:35
  • 1448

【玩转GridView】之Gridview对应行数值自动汇总

前言:     这块的需求在上一篇博客(【玩转GridView】之让GridView动起来(一)】)中已提到,是嵌入gridview中文本框之间的一个求和。之前的做法是全部写在了后台代码中,后来测试...
  • u010542940
  • u010542940
  • 2015年10月26日 19:47
  • 1453

Gridview动态汇总

最近在做项目资金统计,需要对GridView的表头进行重新构建,如多行表头,尾行汇总等。先看下展示效果。 这里我们可以在GridView控件的RowCreated事件中对数据行的格式进行处理。 ...
  • wang463584281
  • wang463584281
  • 2014年11月14日 18:27
  • 576

Android开发中GridView的使用

大家都知道,在android开发中ListView是一种十分常用的组件,但是当需要将一个个的item进行行列排列时,则需要用GridView,这两者的使用方式非常相似,大概可以分为以下四步:1.布局;...
  • Mr_55
  • Mr_55
  • 2016年02月16日 17:49
  • 1684

ASP.NET之GridView常用方法总结

1.     列字段 BoundField:显示数据源中某个字段的值。这是 GridView 控件的默认列类型。 ButtonField:为 GridView 控件中的每个项显示一个命令按钮。 ...
  • TKWDmylove
  • TKWDmylove
  • 2015年08月14日 01:22
  • 926

Android之-----GridView使用的方法总结

Android之-----GridView使用的方法总结     GridView和ListView是Android里面比较常用的多控件布局,其使用方法上篇博客写过的ListViewf非常相似都要用...
  • zhangdongxuan
  • zhangdongxuan
  • 2015年07月17日 10:51
  • 11385

android组件GridView简单使用

GridView与ListView的用法基本一致,不同的只是布局。当我们打开手机,应用会以宫格显示,那就是GridView。 以代码形式展示给大家,适配器使用SimpleAdapter,熟悉了适...
  • sinat_25926481
  • sinat_25926481
  • 2017年04月27日 21:32
  • 3280

安卓中GridView的使用

一、概述 GridView(网格视图)是按照行列的方式来显示内容的,一般用于显示图片,图片文字等内容,比如实现十六宫格,九宫格,四宫格等,用GridView是首选,也是最简单的。 常用属性: Andr...
  • qq_29013473
  • qq_29013473
  • 2016年12月08日 09:51
  • 810

Android ListView/gridView代码优化ViewHolder,converView使用

年轻不懂事,自顾自的写代码,遇到许许多多的问题—maybe–你也会遇到大家都知道listview的使用和MVC框架有一定的异曲同工—-我们会在activity里面异步获取到一定的数据项再传给adapt...
  • cch1024
  • cch1024
  • 2015年08月14日 19:44
  • 1121

(笔记)Android多个GridView

我希望做出这样的效果: 1、GridView本身不滚动,高度布局设置为wrap_content,根据数据源变化。 2、两个或两个以上GridView存在同一个父布局里。 3、父布局可以滑动(滑动几个G...
  • CDSN_lsz
  • CDSN_lsz
  • 2017年07月24日 15:10
  • 262
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android入门(13)——GridView使用汇总
举报原因:
原因补充:

(最多只允许输入30个字)