android中关于GridView的用法

本文详细介绍了如何使用GridView控件在Android应用中实现九宫格布局,包括布局文件、数组资源文件和核心Activity代码的实现,以及如何在GridView中显示多列信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

GrideVIew一般用于九宫格的形式进行布局,在界面上按行、列分布的方式显示各种控件信息,GridVIew和ListView都是开发中比较常用的控件,并且他们拥有共同的父类AbsListView,区别就在于ListView一般用于显示一列信息,而GridView可以显示多列,废话不多说,先上项目运行效果图

 

 

本项目中主要涉及到的文件包含:MainActivity.java、activity_main.xml、item.xml、hero_names.xml

首先来看一看主要的布局文件activity_main.xml:

 

<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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <!-- 
   		android:numColumns="4" 			设置每行显示4列
		android:verticalSpacing="2dp"	设置每行之间边距为2dp
		android:horizontalSpacing="2dp" 设置每列之间边距为2dp
     -->
    <GridView
        android:id="@+id/gv"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
		android:numColumns="4"
		android:verticalSpacing="2dp"
		android:horizontalSpacing="2dp"
		android:gravity="center"/>
    
</RelativeLayout>

 

 

 

另外,针对于GridView中每一个元素的布局文件item.xml:

 

 

 

 

<?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:padding="@dimen/item_space"
    android:orientation="vertical" >

    <ImageView 
        android:id="@+id/ic_img"
        android:layout_gravity="center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:scaleType="fitXY"/>
	<TextView 
	    android:id="@+id/tv_title"
	    android:layout_width="wrap_content"
	    android:layout_height="wrap_content"
	    android:layout_gravity="center"/>
    
</LinearLayout>

下面再看看对应的数组资源hero_names.xml:

 

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="names">
        <item >黑默丁格</item>
        <item >萨科</item>
        <item >瑞兹</item>
        <item >卡特琳娜</item>
        <item >科加斯</item>
        <item >努努</item>
        <item >阿木木</item>
        <item >维迦</item>
        <item >辛吉德</item>
        <item >泰达米尔</item>
        <item >梦多</item>
        <item >普朗克</item>
        <item >墨菲特</item>
        <item >希维尔</item>
        <item >费德提克</item>
        <item >凯尔</item>
        <item >艾维尼亚</item>
        <item >提莫</item>
        <item >艾希</item>
        <item >安妮</item>
        <item >崔斯塔那</item>
        <item >贾克斯</item>
        <item >易</item>
        <item >卡奇</item>
        <item >拉莫斯</item>
        <item >布里茨</item>
        <item >索拉卡</item>
        <item >内瑟斯</item>
        <item >沃里克</item>
        <item >莫甘娜</item>
    </string-array>
</resources>

最后再上核心Activity代码MainActivity.java:

 

 

public class MainActivity extends Activity {

	private GridView gv;
	//定义图片资源ID数组
	private int[] img_ids = {
		R.drawable.pic1,R.drawable.pic2,R.drawable.pic3,R.drawable.pic4,R.drawable.pic5,
		R.drawable.pic6,R.drawable.pic7,R.drawable.pic8,R.drawable.pic9,R.drawable.pic10,
		R.drawable.pic11,R.drawable.pic12,R.drawable.pic13,R.drawable.pic14,R.drawable.pic15,
		R.drawable.pic16,R.drawable.pic17,R.drawable.pic18,R.drawable.pic19,R.drawable.pic20,
		R.drawable.pic21,R.drawable.pic22,R.drawable.pic23,R.drawable.pic24,R.drawable.pic25,
		R.drawable.pic26,R.drawable.pic27,R.drawable.pic28,R.drawable.pic29,R.drawable.pic30,
	};
	//定义字符串数组用于接收从资源文件中获取的数组资源
	private String[] names;
	
	/**
	 * 准备数据
	 * 将图片资源和文本资源整合为list集合,作为创建SimpleApater的参数
	 * @return
	 */
	public List<Map<String,Object>> prepareData(){
		List<Map<String,Object>> list = new ArrayList<Map<String,Object>>();
		for (int i = 0; i < img_ids.length; i++) {
			Map<String,Object> map = new HashMap<String,Object>();
			//添加图片资源id
			map.put("img_item", img_ids[i]);
			//添加文本资源
			map.put("name_item", names[i]);
			list.add(map);
		}
		return list;
	}
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		gv = (GridView)findViewById(R.id.gv);
		//获取arrays资源并赋值给成员变量
		names = this.getResources().getStringArray(R.array.names);
		//获得数据
		List<Map<String,Object>> list = prepareData();
		//创建适配器
		SimpleAdapter adapter = new SimpleAdapter(this, 
												  list, 								 //数据
												  R.layout.item,						 //布局资源
												  new String[]{"img_item","name_item"},  //资源的键
												 //对应用于显示的资源id(图片,和文本)
												  new int[]{R.id.ic_img,R.id.tv_title});
		//设置适配器到GridView中
		gv.setAdapter(adapter);
		//为GridView设置点击事件
		gv.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View view, int index,
					long arg3) {
				Toast.makeText(MainActivity.this, names[index], Toast.LENGTH_SHORT).show();
				
			}
		});
	}

}

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值