Android ApiDemos樣本解析(121):Views->Grid->1. Icon

來源:互聯網
上載者:User

上一篇:http://www.bkjia.com/kf/201208/147770.html

前面介紹過的ListView, Gallery ,Spinner 等都是AdapterView 的子類,本例GridView 也是AdapterView的子類。AdapterView的顯示可以通過資料繫結來實現,資料來源可以是數組或是資料庫記錄,資料來源和AdapterView是通過Adapter作為橋樑。通過Adapter,AdatperView可以顯示資料來源或處理使用者選取事件,如:挑選清單中某項。

 

所有AdapterView的資料來源都是使用Adapter 作為橋樑, 不同的AdapterView,只是顯示資料來源的方式不同,ListView 以列表顯示顯示,Gallery以橫向畫廊方式,GridView則以二維網格的方式顯示,預設GridView根據所顯示的View大小自動計算出每列的個數,也可以通過GridView的setNumColumns(int numColumns)指定列數,或是setColumnWidth(int columnWidth)指定列寬。

本例使用AppsAdapter 讀取App Launcher 中所有應用的表徵圖。Adapter的getView 返回一ImageView:

[java] 
public View getView(int position, View convertView, 
 ViewGroup parent) { 
 ImageView i; 
 
 if (convertView == null) { 
 i = new ImageView(Grid1.this); 
 i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
 i.setLayoutParams(new GridView.LayoutParams(50, 50)); 
 } else { 
 i = (ImageView) convertView; 
 } 
 
 ResolveInfo info = mApps.get(position); 
 i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager())); 
 
 return i; 

public View getView(int position, View convertView,
 ViewGroup parent) {
 ImageView i;

 if (convertView == null) {
 i = new ImageView(Grid1.this);
 i.setScaleType(ImageView.ScaleType.FIT_CENTER);
 i.setLayoutParams(new GridView.LayoutParams(50, 50));
 } else {
 i = (ImageView) convertView;
 }

 ResolveInfo info = mApps.get(position);
 i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));

 return i;
}
Adapter可以返回任意類型的View,比如Button,TextView等,GridView或根據Adapter的getView返回的view 來顯示每一項。

同樣使用setAdapter 為GridView設定資料來源。

[java]
setContentView(R.layout.grid_1); 
mGrid = (GridView) findViewById(R.id.myGrid); 
mGrid.setAdapter(new AppsAdapter()); 

setContentView(R.layout.grid_1);
mGrid = (GridView) findViewById(R.id.myGrid);
mGrid.setAdapter(new AppsAdapter());
本例如果將GridView 改成ListView ,應用表徵圖將以列表顯示。ListView 和GridView使用同一資料來源,不同的只是表現形式(列表或是網格)。這樣可以看到對應同一資料來源,Android可以支援的表現形式非常多樣化。

 

 

 

 

前面介紹過的ListView, Gallery ,Spinner 等都是AdapterView 的子類,本例GridView 也是AdapterView的子類。AdapterView的顯示可以通過資料繫結來實現,資料來源可以是數組或是資料庫記錄,資料來源和AdapterView是通過Adapter作為橋樑。通過Adapter,AdatperView可以顯示資料來源或處理使用者選取事件,如:挑選清單中某項。

 

所有AdapterView的資料來源都是使用Adapter 作為橋樑, 不同的AdapterView,只是顯示資料來源的方式不同,ListView 以列表顯示顯示,Gallery以橫向畫廊方式,GridView則以二維網格的方式顯示,預設GridView根據所顯示的View大小自動計算出每列的個數,也可以通過GridView的setNumColumns(int numColumns)指定列數,或是setColumnWidth(int columnWidth)指定列寬。

本例使用AppsAdapter 讀取App Launcher 中所有應用的表徵圖。Adapter的getView 返回一ImageView:

[java] 
public View getView(int position, View convertView, 
 ViewGroup parent) { 
 ImageView i; 
 
 if (convertView == null) { 
 i = new ImageView(Grid1.this); 
 i.setScaleType(ImageView.ScaleType.FIT_CENTER); 
 i.setLayoutParams(new GridView.LayoutParams(50, 50)); 
 } else { 
 i = (ImageView) convertView; 
 } 
 
 ResolveInfo info = mApps.get(position); 
 i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager())); 
 
 return i; 

public View getView(int position, View convertView,
 ViewGroup parent) {
 ImageView i;

 if (convertView == null) {
 i = new ImageView(Grid1.this);
 i.setScaleType(ImageView.ScaleType.FIT_CENTER);
 i.setLayoutParams(new GridView.LayoutParams(50, 50));
 } else {
 i = (ImageView) convertView;
 }

 ResolveInfo info = mApps.get(position);
 i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager()));

 return i;
}
Adapter可以返回任意類型的View,比如Button,TextView等,GridView或根據Adapter的getView返回的view 來顯示每一項。

同樣使用setAdapter 為GridView設定資料來源。

[java]
setContentView(R.layout.grid_1); 
mGrid = (GridView) findViewById(R.id.myGrid); 
mGrid.setAdapter(new AppsAdapter()); 

setContentView(R.layout.grid_1);
mGrid = (GridView) findViewById(R.id.myGrid);
mGrid.setAdapter(new AppsAdapter());
本例如果將GridView 改成ListView ,應用表徵圖將以列表顯示。ListView 和GridView使用同一資料來源,不同的只是表現形式(列表或是網格)。這樣可以看到對應同一資料來源,Android可以支援的表現形式非常多樣化。

 
作者:mapdigit

 

 

 

 



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.