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();
}
});
}
}