android 自定义控件(初篇)

android 自定义控件

在写UI当中很多时候会用到自定义的控件,其实自定义控件就像是定义一个类进行调用就OK了。有些相关的感念可以查看API

下面就用个简单的例子来说明自定义控件:

 1 public class UserInfoItem extends LinearLayout {
 2 
 3     private TextView aspect;
 4     private ImageView arrow;
 5 
 6     public UserInfoItem(Context context) {
 7         this(context, null);
 8     }
 9 
10     public UserInfoItem(Context context, AttributeSet attrs) {
11         super(context, attrs);
12     LayoutInflater.from(context).inflate(R.layout.user_dynamic_item, this,
13                 true);
14         aspect = (TextView) findViewById(R.id.aspect);
15         arrow = (ImageView) findViewById(R.id.arrow);
16     }
17 
18     /**
19      * @return the aspect
20      */
21     public TextView getAspect() {
22         return aspect;
23     }
24 
25     /**
26      * @param aspect
27      *            the aspect to set
28      */
29     public void setAspect(TextView aspect) {
30         this.aspect = aspect;
31     }
32 
33     /**
34      * @return the arrow
35      */
36     public ImageView getArrow() {
37         return arrow;
38     }
39 
40     /**
41      * @param arrow
42      *            the arrow to set
43      */
44     public void setArrow(ImageView arrow) {
45         this.arrow = arrow;
46     }
47 
48     public void setTextViewText(String str) {
49         aspect.setText(str);
50     }
51 
52     public String getTextViewText() {
53         return aspect.getText().toString();
54 
55     }
56 
57 }

对代码进行一下解读:

定义一个类并继承LinearLayout,LinearLayout本身就是一个View,里面有一句关键语句:LayoutInflater.from(context).inflate(R.layout.user_dynamic_item, this true)它将R.layout.user放入到this当中,而this就是指的这个类,所以

就是将R.layout.user填充到这个类当中了,可以直接findviewById来获取该布局xml中的View进行控制。

设置一些方法来服务其中的View。

R.layout.user_dynamic_item代码如下:

 

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="55dip"
 5     android:background="@drawable/bg_input_single"
 6     android:gravity="center"
 7     android:orientation="horizontal" >
 8 
 9     <TextView
10         android:id="@+id/aspect"
11         android:layout_width="wrap_content"
12         android:layout_height="wrap_content"
13         android:layout_weight="3.0"
14         android:gravity="left"
15         android:text="aspect" 
16         android:layout_marginLeft="20dp"
17         />
18 
19     <ImageView
20         android:id="@+id/arrow"
21         android:layout_width="wrap_content"
22         android:layout_height="wrap_content"
23         android:layout_weight="1.0"
24         android:src="@drawable/mail_arrow" />
25 
26 </LinearLayout>

 

 

最后在想要调用该自定义控件的地方进行调用就行了,调用格式和调用类适相似的:

 

1 <com.xiaoguo.wasp.mobile.widget.UserInfoItem
2         android:id="@+id/myAttention"
3         android:layout_width="match_parent"
4         android:layout_height="65dip"
5         android:layout_marginLeft="8dp"
6         android:layout_marginRight="8dp"
7         android:layout_marginTop="15dp" />

 

 

运行后的重复使用自定义控件效果为:

 

posted @ 2014-04-24 09:21  perfect亮  阅读(277)  评论(0编辑  收藏  举报