(轉自:http://blog.csdn.net/Thanksgining/article/details/42968847)
參考博客:http://blog.csdn.net/xyz_lmn/article/details/6906255
總結:
1、GridView(網格視圖)按照行列來顯示內容,每個網格可以用已有的布局或自定義的布局來填充,並且GridView每行可以顯示多個網格,即有列數之說。
2、GridView需要結合適配器(Adapter)一起使用,使用GridView類的實例對象中的setAdapter方法初始化網格視圖,即gridView.setAdapter(myAdapter)。
3、將GridView中的每一個網格需要是數據打包成一個集合,將此集合作為參數來初始化適配器(Adapter)實例對象,在適配器(Adapter)的getView方法中來獲取集合中的數據,將此數據來初始化對應網格中的控件。
4、適配器(Adapter)中的getView方法在設置適配器和更新適配器數據時被調用,即gridView.setAdapter(myAdapter)和myAdapter.notifyDataSetChanged()時被調用
5、要實現網格之間隔離開來的,首先需要設置用於填充網格的布局背景與網格所在的布局的背景顏色不一致,即mylayout.xml布局的背景與activity_main.xml布局的背景色不一致,而且還需要設置設置網格與網格之間的間距,這樣看起來網格才是分離的。
5、若要實現被選中(點擊)的網格呈現不同的顏色,就需要知道被點擊的網格的Item號,並調用myAdapter.notifyDataSetChanged()去更新適配器數據,最后在適配器中的getView方法中來判斷網格的Item號,如果相等就設置自己所需呈現的背景色(指的是視圖的背景色)。
6、Android實現全屏顯示方法,我們都知道在Android中某些功能的實現往往有兩種方法:一種是在xml文件中設置相應的屬性,另一種是用代碼實現。同樣Android實現全屏也可以通過以下兩種方法實現
(1)、在AndroidManifest.xml的配置文件里的<activity>標簽添加屬性
1 android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
(2)、在Activity的onCreate()方法中的super()和setContentView()兩個方法之間加入下面兩條語句
1 this.requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉標題欄 2 3 this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);//去掉信息欄
7、GridView的一些特殊屬性
android:numColumns=”auto_fit” //GridView的列數設置為自動
android:columnWidth=”90dp " //每列的寬度,也就是Item的寬度
android:stretchMode=”columnWidth"//縮放與列寬大小同步
android:verticalSpacing=”10dp” //兩行之間的邊距
android:horizontalSpacing=”10dp” //兩列之間的邊距
android:cacheColorHint="#00000000" //去除拖動時默認的黑色背景
android:listSelector="#00000000" //去除選中時的黃色底色
android:scrollbars="none" //隱藏GridView的滾動條
android:fadeScrollbars="true" //設置為true就可以實現滾動條的自動隱藏和顯示
android:fastScrollEnabled="true" //GridView出現快速滾動的按鈕(至少滾動4頁才會顯示)
android:fadingEdge="none" //GridView衰落(褪去)邊緣顏色為空,缺省值是vertical。(可以理解為上下邊緣的提示色)
android:fadingEdgeLength="10dip" //定義的衰落(褪去)邊緣的長度
android:stackFromBottom="true" //設置為true時,你做好的列表就會顯示你列表的最下面
android:transcriptMode="alwaysScroll" //當你動態添加數據時,列表將自動往下滾動最新的條目可以自動滾動到可視范圍內
android:drawSelectorOnTop="false" //點擊某條記錄不放,顏色會在記錄的后面成為背景色,內容的文字可見(缺省為false)
AndroidManifest.xml——沒有做任何修改,創建工程默認的
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.wxl.ninebox" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="8" 9 android:targetSdkVersion="19" /> 10 11 <application 12 android:allowBackup="true" 13 android:icon="@drawable/ic_launcher" 14 android:label="@string/app_name" 15 android:theme="@style/AppTheme" > 16 <activity 17 android:name="com.wxl.ninebox.MainActivity" 18 android:label="@string/app_name" > 19 <intent-filter> 20 <action android:name="android.intent.action.MAIN" /> 21 <category android:name="android.intent.category.LAUNCHER" /> 22 </intent-filter> 23 </activity> 24 </application> 25 26 </manifest>
mylayout.xml
1 <?xml version="1.0" encoding="utf-8"?> 2 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:background="#fffccc" 6 android:id="@+id/mylayout" > 7 8 <ImageView 9 android:id="@+id/imageView" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:scaleType="centerCrop" 13 android:layout_gravity="center_horizontal" 14 android:background="@drawable/ic_launcher"/> 15 <TextView 16 android:id="@+id/textView" 17 android:layout_width="wrap_content" 18 android:layout_height="wrap_content" 19 android:layout_gravity="bottom|center_horizontal" 20 android:layout_marginBottom="5dp" 21 android:textColor="#000000" 22 android:textSize="12sp"/> 23 24 </FrameLayout>
activity_main.xml
1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 android:gravity="center" 6 tools:context=".MainActivity" > 7 8 <GridView 9 android:id="@+id/gridView" 10 android:layout_width="wrap_content" 11 android:layout_height="wrap_content" 12 android:numColumns="3" 13 android:verticalSpacing="30dip" 14 android:horizontalSpacing="10dip" 15 android:layout_gravity="center" 16 > 17 </GridView> 18 19 </LinearLayout>
MainActivity.java
1 package com.wxl.ninebox; 2 3 import java.util.ArrayList; 4 import java.util.HashMap; 5 6 import android.os.Bundle; 7 import android.view.LayoutInflater; 8 import android.view.View; 9 import android.view.ViewGroup; 10 import android.view.Window; 11 import android.widget.AdapterView; 12 import android.widget.AdapterView.OnItemClickListener; 13 import android.widget.BaseAdapter; 14 import android.widget.GridView; 15 import android.widget.ImageView; 16 import android.widget.TextView; 17 import android.app.Activity; 18 import android.content.Context; 19 import android.graphics.Color; 20 21 public class MainActivity extends Activity { 22 GridView gridView; 23 View view; 24 MyAdapter myAdapter; 25 ArrayList<HashMap<String, Object>> arrayList; 26 @Override 27 protected void onCreate(Bundle savedInstanceState) { 28 super.onCreate(savedInstanceState); 29 this.requestWindowFeature(Window.FEATURE_NO_TITLE); 30 setContentView(R.layout.activity_main); 31 gridView = (GridView)this.findViewById(R.id.gridView); 32 arrayList = new ArrayList<HashMap<String,Object>>(); 33 for (int i = 1; i < 10; i++) 34 { 35 HashMap<String, Object> hashMap = new HashMap<String, Object>(); 36 hashMap.put("image", R.drawable.ic_launcher); 37 hashMap.put("text", "九宮格"+i); 38 arrayList.add(hashMap); 39 } 40 myAdapter = new MyAdapter(arrayList, this); 41 gridView.setAdapter(myAdapter); 42 gridView.setOnItemClickListener(new OnItemClickListener() { 43 44 @Override 45 public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 46 long arg3) { 47 // TODO Auto-generated method stub 48 myAdapter.setSelection(arg2); 49 myAdapter.notifyDataSetChanged(); 50 } 51 }); 52 } 53 54 public class MyAdapter extends BaseAdapter 55 { 56 ArrayList<HashMap<String, Object>> arrayList; 57 Context context; 58 HashMap<String, Object> hashMap; 59 int selectItem = -1; 60 public MyAdapter(ArrayList<HashMap<String, Object>> arrayList,Context context) { 61 // TODO Auto-generated constructor stub 62 this.arrayList = arrayList; 63 this.context = context; 64 } 65 66 public void setSelection(int position) 67 { 68 selectItem = position; 69 } 70 71 @Override 72 public int getCount() { 73 // TODO Auto-generated method stub 74 if (null == arrayList) 75 { 76 return 0; 77 } 78 else 79 { 80 return arrayList.size(); 81 } 82 83 } 84 85 @Override 86 public Object getItem(int arg0) { 87 // TODO Auto-generated method stub 88 return arrayList.get(arg0); 89 } 90 91 @Override 92 public long getItemId(int arg0) { 93 // TODO Auto-generated method stub 94 return arg0; 95 } 96 97 @SuppressWarnings("unchecked") 98 @Override 99 public View getView(int arg0, View arg1, ViewGroup arg2) { 100 // TODO Auto-generated method stub 101 view = LayoutInflater.from(context).inflate(R.layout.mylayout, arg2,false); 102 ImageView imageView = (ImageView)view.findViewById(R.id.imageView); 103 TextView textView = (TextView)view.findViewById(R.id.textView); 104 hashMap = (HashMap<String, Object>) getItem(arg0); 105 imageView.setImageResource((Integer) hashMap.get("image")); 106 textView.setText((CharSequence) hashMap.get("text")); 107 if (selectItem == arg0) { 108 view.setBackgroundColor(Color.GREEN); 109 } 110 return view; 111 }//設置適配器或更新適配器調用 112 113 } 114 115 }