[size=large;]android开发中的ui控制(五)[/size]
转载自:
http://www.android777.com/index.php/tutorial/android-view/androids-ui-control-v.html
下面看几个比较有意思的ui控件。
spinner:
spinner是adaperview的子类,跟listview、gridview一样,所以得设置adapter提供数据源。
<?xml version="1.0" encoding="utf-8"?><linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><spinner android:id="@+id/spinner1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:prompt="@string/prompt_province" /></linearlayout>
效果图如下:
<p style="text-align: center;"><br><img src="http://dl.iteye.com/upload/attachment/531777/8e461bc2-83ba-319a-ab15-2a482d086451.png" alt="">
[size=large;]
gallery:[/size]
gallery是一个横向的可滚动的list容器,它的焦点一直是在区域的中间部分。它一般用来显示一系列照片,特别是在触摸屏中经常使用它。可以通过在xml中定义:
<?xml version="1.0" encoding="utf-8"?><linearlayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <gallery android:id="@+id/gallery01" android:layout_width="fill_parent" android:layout_height="fill_parent" /></linearlayout>
然后跟其他的listview、gridview、spinner一样,我们将一个adapter与它进行绑定,用来显示几张图片。这边还有一个额外的操作就是要定义一个样式,作为它里面item的样式。在这边我们通过在attrs.xml里定义一个样式来实现:
res\values\attrs.xml:
<?xml version="1.0" encoding="utf-8"?><resources> <declare-styleable name="mygallery"> <attr name="android:galleryitembackground" /> </declare-styleable></resources>
然后将需要显示的图片(附件中的图片js1.jpg,js2.jpg,js3.jpg,js4.jpg,js5.jpg)放到res\drawable或res\drawable-*中。
在显示的activity里,定义一个内部类mybaseadapter用来将数据和gallery进行绑定。
mybaseadapter.java
package com.zhouzijing.android;import java.util.list;import android.content.context;import android.content.res.typedarray;import android.util.log;import android.view.layoutinflater;import android.view.view;import android.view.viewgroup;import android.widget.baseadapter;import android.widget.imageview;import android.widget.textview;public class mybaseadapter extends baseadapter { private list<person> persons; context context; int mgalleryitembackground; public mybaseadapter(context context,list<person> persons){ this.persons = persons; this.context = context; //获取自定义样式 typedarray attr = context.obtainstyledattributes(r.styleable.mygallery); //获取样式里的资源 mgalleryitembackground = attr.getresourceid( r.styleable.mygallery_android_galleryitembackground, 0); attr.recycle(); } @override public int getcount() { return (persons==null)?0:persons.size(); } @override public object getitem(int position) { return persons.get(position); } @override public long getitemid(int position) { return position; } public class viewholder{ textview textviewitem01; imageview imageview; } @override public view getview(int position, view convertview, viewgroup parent) { final person person = (person)getitem(position); viewholder viewholder = null; if(convertview==null){ log.d("mybaseadapter", "新建convertview,position="+position); convertview = layoutinflater.from(context).inflate( r.layout.gallery1_item, null); viewholder = new viewholder(); viewholder.textviewitem01 = (textview)convertview.findviewbyid( r.id.text_view_01); viewholder.imageview = (imageview)convertview.findviewbyid( r.id.image_view_01); convertview.settag(viewholder); }else{ viewholder = (viewholder)convertview.gettag(); log.d("mybaseadapter", "旧的convertview,position="+position); } viewholder.textviewitem01.settext(person.title); viewholder.imageview.setimageresource(person.photo); viewholder.imageview.setbackgroundresource(mgalleryitembackground); return convertview; }}
然后在activity的oncreate方法中,找出gallery,然后将之前定义的所有图片资源放到自定义的adapter:mybaseadapter中,跟gallery绑定。
@override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.gallery1); //要显示的图片 final list<person> persons = new arraylist<person>(); persons.add(new person("夜景1",r.drawable.js1)); persons.add(new person("夜景2",r.drawable.js2)); persons.add(new person("夜景3",r.drawable.js3)); persons.add(new person("夜景4",r.drawable.js4)); persons.add(new person("夜景5",r.drawable.js5)); //显示gallery gallery g = (gallery) findviewbyid(r.id.gallery01); g.setadapter(new mybaseadapter(this, persons)); g.setonitemclicklistener(new onitemclicklistener(){ @override public void onitemclick(adapterview<?> parent, view view, int position, long id) { toast.maketext(getapplicationcontext(), "点击了"+persons.get(position).title, toast.length_short).show(); } }); }
效果图如下:
<p style="text-align: center;"><br><img src="http://dl.iteye.com/upload/attachment/532052/c5dcad79-72dd-3459-af56-7397c5084ae2.png" alt="">