[size=large;]android开发中的ui控制(四)[/size]
转载自:
http://www.android777.com/index.php/tutorial/android-view/androids-ui-control-d.html
列表多值显示是android中一个常用的功能,像是显示所有联系人、所有信息、文件目录等就需要列表显示控制。列表显示可以分为:纵向列表显示、grid网格排列、gallery横向显示。
listview: listview主要用来显示纵向的列表。一般我们通过编写一个继承listactivity的activity类来做展示界面,因为listactivity内置了一个listview对象。通过调用listactivity.setlistadpater将需要显示的数据使用一个adapter绑定到listview中。
上面可以看到listview的类层次结构,它是一个viewgroup,表明它是一个容器,里面可以放view对象,这边的view对象就是listview里面的一条数据。详细使用方法请看
listview教程。
grid: 很多ui界面都需要使用grid来显示二维数据,grid就像是html中的table用来显示一个表的行列值,grid也可以被用来显示图标,android系统启动后的菜单列出了所有应用就是用grid控制。 用grid显示数据:
<p style="text-align: center;"><br><img src="http://dl.iteye.com/upload/attachment/530627/006913f9-c594-33d7-8e70-5d707d85a9eb.png" alt="">这种用grid显示数据在b/s和c/s中比较常见,在手机由于受到屏幕大小限制用这种方式显示数据很不方便,所有一般grid用来显示一些图标,如系统的应用图片:
//使用intent查询出所有的app启动activity信息 intent mainintent = new intent(intent.action_main, null); mainintent.addcategory(intent.category_launcher); list<resolveinfo> apps = getpackagemanager().queryintentactivities(mainintent, 0);
查找出结果后将会存放在一个list<resolveinfo>中,里面包含了所有应用程序的启动activity信息。接着编写一个<a title="listview的使用和特性研究(二)" href="http://www.android777.com/index.php/tutorial/listview-2.html" target="_blank">自定义arrayadapter</a>将list<resolveinfo>显示到gridview中。代码如下:
/** called when the activity is first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.gridview); gridview gridview = (gridview) findviewbyid(r.id.datagrid); //使用intent查询出所有的app启动activity信息 intent mainintent = new intent(intent.action_main, null); mainintent.addcategory(intent.category_launcher); list<resolveinfo> apps = getpackagemanager().queryintentactivities(mainintent, 0); gridview.setadapter(new appadapter(this, apps)); } class appadapter extends arrayadapter<resolveinfo>{ context mcontext; public appadapter(context context,list<resolveinfo> apps){ super(context,0,apps); mcontext = context; } @override public view getview(int position, view convertview, viewgroup parent) { imageview view ; if(convertview == null){ view = new imageview(mcontext); view.setlayoutparams(new gridview.layoutparams(50, 50)); }else{ view = (imageview) convertview; } resolveinfo mresolveinfo = getitem(position); view.setimagedrawable(mresolveinfo.activityinfo.loadicon(getpackagemanager())); return view; } }
java代码引用的xml布局文件:res\layout\gridview.xml:
<?xml version="1.0" encoding="utf-8"?><gridview xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/datagrid" android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="10px" android:verticalspacing="10px" android:horizontalspacing="10px" android:numcolumns="auto_fit" android:columnwidth="80px" android:stretchmode="columnwidth" android:gravity="center" />
运行效果如下:
<p style="text-align: center;"><br><img src="http://dl.iteye.com/upload/attachment/530912/3d53e5b2-2e38-3064-ae10-9871131ae045.png" alt="">
@override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.datetime); datepicker dp = (datepicker) findviewbyid(r.id.datepicker); timepicker tp = (timepicker) findviewbyid(r.id.timepicker); dp.init(2012, //年 11, //月 基于0,所以11代表12月 28, //日 null); tp.setis24hourview(true); //使用24小时格式 tp.setcurrenthour(new integer(10)); //设置当前小时 tp.setcurrentminute(new integer(10)); //设置分钟 }
运行效果如下:
<p style="text-align: center;"><br><img src="http://dl.iteye.com/upload/attachment/530937/33c7b52c-8dbc-3f00-89a4-eefe66eabe2a.png" alt="">
<p style="text-align: left;">