http://blog.csdn.net/wangkuifeng0118/article/details/7097733

很多时候android常用的控件不能满足我们的需求,那么我们就需要自定义一个控件了。今天做了一个自定义控件的实例,来分享下。

              首先定义一个layout实现按钮内部布局:

      

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="horizontal" >  
  6.   
  7.     <ImageView  
  8.         android:id="@+id/imageView1"  
  9.         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" />  
  16.   
  17.     <TextView  
  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"  
  23.         android:text="确定"  
  24.         android:textColor="#000000" />  
  25.   
  26. LinearLayout>  


        接下来写一个类继承LinearLayout,导入刚刚的布局,并且设置需要的方法,从而使的能在代码中控制这个自定义控件内容的显示。

     

[html]  view plain copy
  1. public class ImageBtn extends LinearLayout {  
  2.   
  3.     private ImageView imageView;  
  4.     private TextView  textView;  
  5.       
  6.     public ImageBtn(Context context) {  
  7.         super(context);  
  8.         // TODO Auto-generated constructor stub  
  9.     }  
  10.     public ImageBtn(Context context, AttributeSet attrs) {  
  11.         super(context, attrs);  
  12.         // TODO Auto-generated constructor stub  
  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);  
  17.     }  
  18.       
  19.     /**   
  20.      * 设置图片资源   
  21.      */    
  22.     public void setImageResource(int resId) {    
  23.         imageView.setImageResource(resId);    
  24.     }    
  25.     
  26.     /**   
  27.      * 设置显示的文字   
  28.      */    
  29.     public void setTextViewText(String text) {    
  30.         textView.setText(text);    
  31.     }    
  32.   
  33. }  


     在需要使用这个自定义控件的layout中加入这控件,只需要在xml中加入即可。

  

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:layout_width="fill_parent"  
  4.     android:layout_height="fill_parent"  
  5.     android:orientation="horizontal" >  
  6.   
  7.     <cn.com.karl.view.ImageBtn  
  8.         android:id="@+id/btn_right"  
  9.         android:layout_height="wrap_content"    
  10.         android:layout_width="wrap_content"  
  11.         android:background="@drawable/btn"    
  12.         />  
  13.   
  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"    
  20.         />  
  21.   
  22. LinearLayout>  


        这里用到了背景图片 在drawable/btn.xml

   

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <selector xmlns:android="http://schemas.android.com/apk/res/android" >  
  3.   
  4.     <item android:state_focused="true" android:state_pressed="false" android:drawable="@drawable/btn_normal">item>  
  5.     <item android:state_pressed="true" android:drawable="@drawable/btn_white">item>  
  6.     <item android:state_checked="true" android:drawable="@drawable/btn_white">item>  
  7.     <item android:state_focused="false" android:state_pressed="false" android:drawable="@drawable/btn_normal">item>  
  8.       
  9. selector>  

      最后在activity中设置该控件,和其他控件差不多:

     

[html]  view plain copy
  1. public class IdentifyButtonActivity extends Activity {  
  2.    private ImageBtn imageBtn1;  
  3.    private ImageBtn imageBtn2;  
  4.     @Override  
  5.     protected void onCreate(Bundle savedInstanceState) {  
  6.         // TODO Auto-generated method stub  
  7.         super.onCreate(savedInstanceState);  
  8.         setContentView(R.layout.identifybutton);  
  9.           
  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);  
  16.           
  17.         imageBtn1.setOnClickListener(new View.OnClickListener() {  
  18.               
  19.             public void onClick(View v) {  
  20.                 // TODO Auto-generated method stub  
  21.                 Toast.makeText(getApplicationContext(), "点击的正确按钮", 1).show();  
  22.             }  
  23.         });  
  24.           
  25.         imageBtn2.setOnClickListener(new View.OnClickListener() {  
  26.               
  27.             public void onClick(View v) {  
  28.                 // TODO Auto-generated method stub  
  29.                 Toast.makeText(getApplicationContext(), "点击的错误按钮", 1).show();  
  30.             }  
  31.         });  
  32.     }  
  33. }  

        最后看看我们自定义控件的效果吧!

       
    

     点击后还有按下按钮的效果。


更多相关文章

  1. Android——自定义AlertDialog
  2. 使ImageView充满整个控件的方法
  3. Android(安卓)闪屏页与引导页制作
  4. android音量控制setVolumeControlStream
  5. Android(安卓)之约束布局
  6. Android入门之TableLayout应用解析(一)
  7. 自定义datePicker的实现
  8. 继承自SwipeRefreshLayout,实现加载更多
  9. Android(安卓)设置应用启动动画

随机推荐

  1. android 源码编译报错记录
  2. 【Android策略】The content of the adap
  3. Android(安卓)动画1--View控件的显示和隐
  4. Android关于图片处理,更改图片灰度
  5. android 银联支付接入报nullexception异
  6. android之service
  7. Android手机中紧急号码的定制
  8. Mac 完全卸载 Android(安卓)Studio
  9. jni 获得 android 系统属性
  10. goolge 地图地址位置解析