Android UI編程(1)——九宮格(GridView)


(轉自: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 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM