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可以显示数据源或处理用户选取事件,如:选择列表中某项。
所有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示例解析(182):Views->Progress Bar->1. Incremental
-
Android ApiDemos示例解析(112):Views->Expandable Lists->1. Custom Adapter
-
Android ApiDemos示例解析(107):Views->Controls->1. Light Theme
-
Android ApiDemos示例解析(99):Views->Auto Complete->1. Screen Top
-
Android ApiDemos示例解析(168):Views->Lists->1. Array
-
Android ApiDemos示例解析(110):Views->Data Widgets->1. Dialog
-
Android ApiDemos示例解析(121):Views->Grid->1. Icon Grid
-
Android ApiDemos示例解析(119):Views->Gallery->1. Photos