很多时候android常用的控件不能满足我们的需求,那么我们就需要自定义一个控件了。今天做了一个自定义控件的实例,来分享下。
              首先定义一个layout实现按钮内部布局:
| 01 | <?xmlversion="1.0"encoding="utf-8"?> | 
 
| 02 | <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" | 
 
| 03 |     android:layout_width="fill_parent" | 
 
| 04 |     android:layout_height="fill_parent" | 
 
| 05 |     android:orientation="horizontal"> | 
 
| 08 |         android:id="@+id/imageView1" | 
 
| 09 |         android:layout_width="wrap_content" | 
 
| 10 |         android:layout_height="wrap_content" | 
 
| 11 |         android:layout_gravity="center_vertical" | 
 
| 12 |         android:paddingBottom="5dip" | 
 
| 13 |         android:paddingLeft="40dip" | 
 
| 14 |         android:paddingTop="5dip" | 
 
| 15 |         android:src="@drawable/right_icon"/> | 
 
| 18 |         android:id="@+id/textView1" | 
 
| 19 |         android:layout_width="wrap_content" | 
 
| 20 |         android:layout_height="wrap_content" | 
 
| 21 |         android:layout_gravity="center_vertical" | 
 
| 22 |         android:layout_marginLeft="8dip" | 
 
| 24 |         android:textColor="#000000"/> | 
 
 
 
        接下来写一个类继承LinearLayout,导入刚刚的布局,并且设置需要的方法,从而使的能在代码中控制这个自定义控件内容的显示。
| 01 | publicclassImageBtn extendsLinearLayout { | 
 
| 03 |     privateImageView imageView; | 
 
| 04 |     privateTextView  textView; | 
 
| 06 |     publicImageBtn(Context context) { | 
 
| 10 |     publicImageBtn(Context context, AttributeSet attrs) { | 
 
| 11 |         super(context, attrs); | 
 
| 13 |         LayoutInflater inflater=(LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); | 
 
| 14 |         inflater.inflate(R.layout.imagebtn, this); | 
 
| 15 |         imageView=(ImageView) findViewById(R.id.imageView1); | 
 
| 16 |         textView=(TextView)findViewById(R.id.textView1); | 
 
| 22 |     publicvoidsetImageResource(intresId) {   | 
 
| 23 |         imageView.setImageResource(resId);   | 
 
| 29 |     publicvoidsetTextViewText(String text) {   | 
 
| 30 |         textView.setText(text);   | 
 
 
 
     在需要使用这个自定义控件的layout中加入这控件,只需要在xml中加入即可。
| 01 | <?xmlversion="1.0"encoding="utf-8"?> | 
 
| 02 | <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" | 
 
| 03 |     android:layout_width="fill_parent" | 
 
| 04 |     android:layout_height="fill_parent" | 
 
| 05 |     android:orientation="horizontal"> | 
 
| 07 |     <cn.com.karl.view.ImageBtn | 
 
| 08 |         android:id="@+id/btn_right" | 
 
| 09 |         android:layout_height="wrap_content" | 
 
| 10 |         android:layout_width="wrap_content" | 
 
| 11 |         android:background="@drawable/btn" | 
 
| 14 |     <cn.com.karl.view.ImageBtn | 
 
| 15 |         android:id="@+id/btn_error" | 
 
| 16 |         android:layout_marginLeft="5dp" | 
 
| 17 |         android:layout_height="wrap_content" | 
 
| 18 |         android:layout_width="wrap_content" | 
 
| 19 |         android:background="@drawable/btn" | 
 
 
 
        这里用到了背景图片 在drawable/btn.xml
| 1 | <?xmlversion="1.0"encoding="utf-8"?> | 
 
| 2 | <selectorxmlns:android="http://schemas.android.com/apk/res/android"> | 
 
| 4 |     <itemandroid:state_focused="true"android:state_pressed="false"android:drawable="@drawable/btn_normal"></item> | 
 
| 5 |     <itemandroid:state_pressed="true"android:drawable="@drawable/btn_white"></item> | 
 
| 6 |     <itemandroid:state_checked="true"android:drawable="@drawable/btn_white"></item> | 
 
| 7 |     <itemandroid:state_focused="false"android:state_pressed="false"android:drawable="@drawable/btn_normal"></item> | 
 
 
 
![0_1324610237bs0z.gif.png 0_1324610237bs0z.gif.png]() 
 
最后在activity中设置该控件,和其他控件差不多:
| 01 | publicclassIdentifyButtonActivity extendsActivity { | 
 
| 02 |    privateImageBtn imageBtn1; | 
 
| 03 |    privateImageBtn imageBtn2; | 
 
| 05 |     protectedvoidonCreate(Bundle savedInstanceState) { | 
 
| 07 |         super.onCreate(savedInstanceState); | 
 
| 08 |         setContentView(R.layout.identifybutton); | 
 
| 10 |         imageBtn1=(ImageBtn) this.findViewById(R.id.btn_right); | 
 
| 11 |         imageBtn2=(ImageBtn) this.findViewById(R.id.btn_error); | 
 
| 12 |         imageBtn1.setTextViewText("确定"); | 
 
| 13 |         imageBtn2.setTextViewText("取消"); | 
 
| 14 |         imageBtn1.setImageResource(R.drawable.right_icon); | 
 
| 15 |         imageBtn2.setImageResource(R.drawable.error_icon); | 
 
| 17 |         imageBtn1.setOnClickListener(newView.OnClickListener() { | 
 
| 19 |             publicvoidonClick(View v) { | 
 
| 21 |                 Toast.makeText(getApplicationContext(), "点击的正确按钮", 1).show(); | 
 
| 25 |         imageBtn2.setOnClickListener(newView.OnClickListener() { | 
 
| 27 |             publicvoidonClick(View v) { | 
 
| 29 |                 Toast.makeText(getApplicationContext(), "点击的错误按钮", 1).show(); | 
 
 
 
        最后看看我们自定义控件的效果吧!
![dddd.png dddd.png]()
     点击后还有按下按钮的效果。