Android網格視圖GridView的使用
GridView(網格視圖)是按照行列的方式來顯示內容的,一般用于顯示圖片,圖片等內容,比如實現九宮格圖,用GridView是首選,也是最簡單的。主要用于設置Adapter。
網格視圖GridView的排列方式與矩陣類似,當屏幕上有很多元素(文字、圖片或其他元素)需要按矩陣格式進行顯示時,就可以使用GridView控件來實現。
GridView常用的XML屬性:

本文將以一個具體的實例來說明如何使用GridView控件實現手機屏幕上各個應用軟件圖標的擺放,以及應用軟件名稱的顯示。
完成后的程序運行效果如圖1所示。

圖1 主界面顯示效果
1.界面布局
通過查看GridView的API幫助文檔(http://developer.android.com/reference/android/widget/GridView.html),可以了解到GridView的常用xml屬性如圖2所示。

其中,android:columnWidth[int]用于設置每列的寬度;android:gravity[int]用于設置每個網格的比重;android:horizontalSpacing[int]用于設置網格之間列的默認水平距離;android:numColumn[int]用于設置列數;android:stretchMode[int]用于設置列應該以何種方式填充可用空間;android:verticalSpacing[int]用于設置網格之間行的默認垂直距離。
了解了上述的GridView常用xml屬性之后,我們就可以完成對主界面的xml布局文件編寫了。在xml布局文件中,我們使用LinearLayout對整個界面進行垂直布局,然后在該布局中添加一個GridView控件即可。具體的xml布局文件源碼如下:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent" > <GridView android:id="@+id/gridView" android:layout_width="match_parent" android:layout_height="wrap_content" android:numColumns="" android:horizontalSpacing="dp" android:verticalSpacing="dp"> </GridView> </LinearLayout>
在GridView控件中,我們通過android:numColumns="4"指定了網格的列數為4;通過android:horizontalSpacing="10dp"和android:verticalSpacing="10dp"指定了網格之間的水平距離和垂直距離都為10dp。
2.網格元素布局
如圖1所示,在每個網格內,我們都需要顯示兩項內容:應用軟件圖標以及應用軟件名稱。因此,我們還需要對網格內元素進行相應的布局。
我們可以在項目工程的layout目錄下新建一個名為“griditeminfo.xml”的xml布局文件,完成對網格內元素的布局。在該xml布局文件中,我們使用相對布局RelativeLayout對網格內的元素進行排列,將一個ImageView控件以水平居中的形式放置在網格內(上方),用來顯示應用程序的圖標;將一個TextView控件以水平居中的形式放置在網格內(下方),用來顯示應用程序的名稱。具體的griditeminfo.xml源碼如下:
<?xml version="." encoding="utf-"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" > <ImageView android:id="@+id/itemImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" > </ImageView> <TextView android:id="@+id/itemName" android:layout_below="@+id/itemImage" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" > </TextView> </RelativeLayout>
3.資源儲存
在該實例中,我們需要對眾多的應用軟件圖標以及應用軟件名稱進行儲存。很顯然,應用軟件圖標以及應用軟件名稱之間存在著一一對應的關系,我們可以使用HashMap分別對應用軟件圖標以及應用軟件名稱進行存儲,然后再將HashMap添加到ArrayList中,便可以完成資源的儲存了。具體實現方法如下:
//將圖標圖片和圖標名稱存入ArrayList中
//Author:博客園-依舊淡然
ArrayList<HashMap<String, Object>> item = new ArrayList<HashMap<String, Object>>();
for (int i = ; i < resIds.length; i++) {
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("itemImage", resIds[i]);
map.put("itemName", name[i]);
item.add(map);
}
其中,數組resIds[]儲存著應用軟件圖標的資源id;數組name[]儲存著應用軟件名稱,并通過for循環(huán)遍歷語句將其存入了HashMap中。
4.簡單適配器SimpleAdapter
簡單適配器SimpleAdapter繼承自BaseAdapter,用于將靜態(tài)數據映射到xml文件中定義好的視圖當中。比如可以指定靜態(tài)數據為由Map組成的ArrayList。在ArrayList中每個條目對應List中的一行,Map可以包含多項數據。
SimpleAdapter的構造方法如下:
public SimpleAdapter (Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to);
其中,參數context用于指定SimpleAdapter所關聯(lián)的上下文對象;參數data用于指定Map列表;參數resource用于指定資源標識符(即列表項的視圖布局);參數from用于指定Map列表中每項數據所對應的標簽;參數to用于指定Map列表中每項數據在布局文件中所要匹配的對象。
在該實例中,實現SimpleAdapter的構造方法如下所示:
//SimpleAdapter對象,匹配ArrayList中的元素
//Author : 依舊淡然
SimpleAdapter simpleAdapter = new SimpleAdapter
(this, item, R.layout.griditeminfo, new String[] {"itemImage","itemName"},
new int[] {R.id.itemImage,R.id.itemName}) {
};
實現了簡單適配器SimpleAdapter之后,我們還需要將該簡單適配器SimpleAdapter添加到GridView對象當中去,可以通過如下方法實現:
mGridView.setAdapter(simpleAdapter);
5.事件監(jiān)聽
在實際的應用當中,我們需要對用戶的操作進行監(jiān)聽,即需要知道用戶選擇了哪一個應用軟件。
在網格控件GridView中,常用的事件監(jiān)聽器有兩個:OnItemSelectedListener和OnItemClickListener。其中,OnItemSelectedListener用于項目選擇事件監(jiān)聽,OnItemClickListener用于項目點擊事件監(jiān)聽。
要實現這兩個事件監(jiān)聽很簡單,繼承OnItemSelectedListener和OnItemClickListener接口,并實現其抽象方法即可。其中,需要實現的OnItemClickListener接口的抽象方法如下:
public void onItemClick(AdapterView<?> parent, View view, int position, long id);
需要實現的OnItemSelectedListener接口的抽象方法有兩個,分別如下:
public void onItemSelected(AdapterView<?> parent, View view, int position, long id); public void onNothingSelected(AdapterView<?> parent);
- Android基于OpenGL在GLSurfaceView上繪制三角形及使用投影和相機視圖方法示例
- Android開發(fā)之自定義View(視圖)用法詳解
- Android中的ViewPager視圖滑動切換類的入門實例教程
- Android視圖控件架構分析之View、ViewGroup
- Android應用開發(fā)中自定義ViewGroup視圖容器的教程
- Android App中自定義View視圖的實例教程
- Android中在GridView網格視圖上實現item拖拽交換的方法
- Android listview多視圖嵌套多視圖
- Android Moveview滑屏移動視圖類完整實例
- Android視圖的繪制流程(上) View的測量
相關文章
Android從源碼的角度徹底理解事件分發(fā)機制的解析(下)
這篇文章主要介紹了Android從源碼的角度徹底理解事件分發(fā)機制的解析(下),具有很好的參考價值,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-05-05
Android 自動化測試經驗分享 深入UiScrollable
UiScrollable是一個UiCollection(這東西還沒搞懂),我們可以使用它,在可滑動的頁面(水平滑動或上下滑動都可以)上查找我們想要的控件(item)2013-05-05
Android編程視頻播放API之MediaPlayer用法示例
這篇文章主要介紹了Android編程視頻播放API之MediaPlayer用法,結合實例形式分析了基于Android API實現視頻播放功能的多媒體文件讀取、判斷、事件響應及流媒體播放等相關實現技巧,需要的朋友可以參考下2017-08-08
解決Eclipse啟動出錯:Failed to create the Java Virtual Machine
這篇文章主要介紹了解決Eclipse啟動出錯:Failed to create the Java Virtual Machine的相關資料,這里說明出錯原因及查找錯誤和解決辦法,需要的朋友可以參考下2017-07-07
Android Activity與Fragment之間的跳轉實例詳解
這篇文章主要介紹了Android Activity與Fragment之間的跳轉實例詳解的相關資料,需要的朋友可以參考下2017-02-02

