很多时候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. C# 特性(Attribute)(二)

    AttributeUsage类是另外一个预定义特性类,它帮助我们控制我们自己的定制特性的使用.它描述了一个定制特性如和被使用.    AttributeUsage有三个属性,我们可以把它放置在定制属性 ...

  2. 敏捷开发方法XP的12个最佳实践

    极限编程(eXtreme Programming,简称XP)是一种轻量级.高效.低风险.柔性.可预测的.科学的软件开发方法,其特性包含在12个最佳实践中. 1.  计划游戏 ( Planning Ga ...

  3. Cognos访问权限之让拒绝更友善

    关于cognos的访问权限之前我也做了不少总结,但是由于时间关系加上用户也只要实现功能就好,我们做的效果就是像很多人一样,就那样就好了.但是有很多事情,只要你肯动脑筋,你会发现,你还可以做的更好,下面 ...

  4. 【Python】在控制台输出不同颜色的文字

    今天调程序出了一个极为奇怪的问题,由于控制台输出挺多,就想把问题着重表示一下,具体即是在控制台输出红色文字. 于是在网上搜寻到了这篇:https://www.cnblogs.com/gongxr/p/ ...

  5. 程序员们必备的10款免费jquery插件

    本周带来10款免费的jquery插件.如果你也有好的作品,欢迎分享到社区中来,在得到帮助的同时,也能与更多人分享来自你的作品. jQuery导航菜单置顶插件 - stickyUp . 在线演示 sti ...

  6. IN 查询时出现ORA-01795:列表中的最大表达式数为1000解决方法

    问题描写叙述: SQL进行IN查询时出现:java.sql.SQLException: ORA-01795: 列表中的最大表达式数为 1000 解决的方法: 问题原因是:SQL进行IN查询时.IN中的 ...

  7. mysql字符集说明

    mysql字符集说明 一.mysql中涉及的几个字符集 Ø character-set-server/default-character-set:服务器字符集,默认情况下所采用的. Ø charact ...

  8. 怎样增加Dave 英语学习小组

    一.     增加小组 英语对IT 是非常重要的,但非常多人都不能坚持去学习,Dave 英语学习小组成立与已经超过半年,如今进行扩招.欢迎想提高英语,而且能够坚持每天学习的人,增加Dave 的小组.并 ...

  9. VMware vSphere学习之手动克隆虚拟机

    VMware ESxi5.0中,在没有安装VMware vCenter server虚拟机管理器的情况下,vSphere Client是没有提供克隆选项的. 但是还是有以下方法可以通过vSphere ...

  10. ubuntu Server 设置主机静态 ip地址

    ubuntu Server 设置主机静态 ip地址 1:先输入 ifconfig 查看当前网络配置 2:然后关闭 eth0 网卡 sudo ifdown eth0 3:配置静态ip sudo vim ...