欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-03-30 08:41:15
...

前面介绍过的ListView, Gallery ,Spinner 等都是AdapterView 的子类,本例GridView 也是AdapterView的子类。AdapterView的显示可以通过数据绑定来实现,数据源可以是数组或是数据库记录,数据源和AdapterView是通过Adapter作为桥梁。通过Adapter,AdatperView可以显示数据源或处理用户选取事件,如:选择列表中某项。

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

所有AdapterView的数据源都是使用Adapter 作为桥梁, 不同的AdapterView,只是显示数据源的方式不同,ListView 以列表显示显示,Gallery以横向画廊方式,GridView则以二维网格的方式显示,缺省GridView根据所显示的View大小自动计算出每列的个数,也可以通过GridView的setNumColumns(int numColumns)指定列数,或是setColumnWidth(int columnWidth)指定列宽。

本例使用AppsAdapter 读取App Launcher 中所有应用的图标。Adapter的getView 返回一ImageView:

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设置数据源。

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

本例如果将GridView 改成ListView ,应用图标将以列表显示。ListView 和GridView使用同一数据源,不同的只是表现形式(列表或是网格)。这样可以看到对应同一数据源,Android可以支持的表现形式非常多样化。

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