当前位置:操作系统 > 安卓/Android >>

Android ApiDemos示例解析(121):Views->Grid->1. Icon Grid

上一篇:http://www.zzzyk.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

 

 

 

 



补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,