很多时候android常用的控件不能满足我们的需求,那么我们就需要自定义一个控件了。今天做了一个自定义控件的实例,来分享下。
首先定义一个layout实现按钮内部布局:
01 |
<? xml
version = "1.0"
encoding = "utf-8" ?>
|
02 |
< LinearLayout
xmlns: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 |
public class
ImageBtn extends LinearLayout {
|
03 |
private
ImageView imageView;
|
04 |
private
TextView textView;
|
06 |
public
ImageBtn(Context context) {
|
10 |
public
ImageBtn(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 |
public
void setImageResource( int
resId) {
|
23 |
imageView.setImageResource(resId);
|
29 |
public
void setTextViewText(String text) {
|
30 |
textView.setText(text);
|
在需要使用这个自定义控件的layout中加入这控件,只需要在xml中加入即可。
01 |
<? xml
version = "1.0"
encoding = "utf-8" ?>
|
02 |
< LinearLayout
xmlns: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 |
<? xml
version = "1.0"
encoding = "utf-8" ?>
|
2 |
< selector
xmlns:android = "http://schemas.android.com/apk/res/android"
>
|
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 >
|
最后在activity中设置该控件,和其他控件差不多:
01 |
public class
IdentifyButtonActivity extends
Activity {
|
02 |
private
ImageBtn imageBtn1;
|
03 |
private
ImageBtn imageBtn2;
|
05 |
protected
void onCreate(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( new
View.OnClickListener() {
|
19 |
public
void onClick(View v) {
|
21 |
Toast.makeText(getApplicationContext(), "点击的正确按钮" , 1 ).show();
|
25 |
imageBtn2.setOnClickListener( new
View.OnClickListener() {
|
27 |
public
void onClick(View v) {
|
29 |
Toast.makeText(getApplicationContext(), "点击的错误按钮" , 1 ).show();
|
最后看看我们自定义控件的效果吧!
点击后还有按下按钮的效果。
android自定义控件实例,布布扣,bubuko.com
android自定义控件实例