很多时候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" >
06  
07     <ImageView
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" />
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,导入刚刚的布局,并且设置需要的方法,从而使的能在代码中控制这个自定义控件内容的显示。

01 public class ImageBtn extends LinearLayout {
02  
03     private ImageView imageView;
04     private TextView  textView;
05      
06     public ImageBtn(Context context) {
07         super(context);
08         // TODO Auto-generated constructor stub
09     }
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中加入即可。

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" >
06  
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" 
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

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中设置该控件,和其他控件差不多:

01 public class IdentifyButtonActivity extends Activity {
02    private ImageBtn imageBtn1;
03    private ImageBtn imageBtn2;
04     @Override
05     protected void onCreate(Bundle savedInstanceState) {
06         // TODO Auto-generated method stub
07         super.onCreate(savedInstanceState);
08         setContentView(R.layout.identifybutton);
09          
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 }

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

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

android自定义控件实例的更多相关文章

  1. android自定义控件实例(Linearlayout组合TextView和ImageView)

    2013-12-18 11:25:22 转载自: http://www.open-open.com/lib/view/open1328836804515.html 很多时候android常用的控件不能 ...

  2. Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码

    Android项目开发中经常会遇见需要实现圆角或者圆形的图片功能,如果仅仅使用系统自带的ImageView控件显然无法实现此功能,所以通过系列文章的形式由简到繁全方位的介绍一下此功能的实现,巩固一下自 ...

  3. Android自定义控件1

    概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...

  4. 一起来学习Android自定义控件1

    概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...

  5. Android自定义控件(状态提示图表) (转)

    源:Android自定义控件(状态提示图表) 源:Android应用开发 [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果] 1  背景 前面分析 ...

  6. android自定义控件——以滑动开关为例

    0.引言 (1)Android从4.0开始提供了switch的滑动开关效果组件,但是之前版本却没有 (2)很多时候我们写程序,都希望把有用的通用的通用的东西封装起来,以便以后重用. 本文根据组件开发思 ...

  7. Android自定义控件之自定义ViewGroup实现标签云

    前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...

  8. Android自定义控件之自定义组合控件

    前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...

  9. Android自定义控件之自定义属性

    前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控 ...

随机推荐

  1. DIV-CSS布局中position属性详解

    本文向大家描述一下DIV CSS布局中的position属性的用法,position属性主要有四种属性值,任何元素的默认position的属性值均是static,静态.这节课主要讲讲relative( ...

  2. golang struct转map

    struct转map package main import ( "fmt" "reflect" "time" ) type User st ...

  3. Cognos第三方权限认证Oracle用户库

    一:概要描述 1.1:项目背景 Cognos具有强大的报表功能,但是却没有提供一个完善的用户管理体系,针对商业智能系统对数据的安全性要求,我们必须实现不同用户对不同数据的访问,确保企业级以及部门级的数 ...

  4. what difference between libfm and libffm

    https://www.kaggle.com/users/25112/steffen-rendle/forum Congratulations to Yu-Chin, Wei-Sheng, Yong ...

  5. VM虚拟机安装之后出现无法自动登录到桌面以及__vmware_user__怎么办

    1 运行control userpasswords2 打开用户账户对话框,点击高级选项中的"高级"按钮 2 右击" __vmware_user__"这个账户,选 ...

  6. shiro实现基于机构加username的验证以及rememberMe

    一.Shiro的一些经验与rememberMe实现原理 Shiro的登录(Authorization)和验权(Authentication).默认都是依据usernameUserName来做验证和授权 ...

  7. Asp.Net 之 前台绑定常用总结

    1.<%= 变量名 %> 里面放的是后台定义的变量名,如: <div> <p> <%= DateTime.Now.ToString() %></p ...

  8. Shader Object及Program操作API

    Shader Object及Program操作API Program:  1. GLuint glCreateProgram( void );//创建 2. void glDeleteProgram( ...

  9. RESTful到底是什么玩意??

      0. REST不是"rest"这个单词,而是几个单词缩写.: 1. REST描述的是在网络中client和server的一种交互形式:REST本身不实用,实用的是如何设计 RE ...

  10. 〖Linux〗zigbee实验之cc2430移植tinyos2.x的步骤(Ubuntu13.10)

    开发环境:Ubuntu13.10 1. 添加源,并安装tinyos-2.11:sudo gedit  /etc/apt/sources.list #往里边添加deb http://tinyos.sta ...