很多时候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) { |
08 |
// TODO Auto-generated constructor stub |
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); |
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) { |
06 |
// TODO Auto-generated method stub |
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) { |
20 |
// TODO Auto-generated method stub |
21 |
Toast.makeText(getApplicationContext(), "点击的正确按钮" , 1 ).show(); |
25 |
imageBtn2.setOnClickListener( new View.OnClickListener() { |
27 |
public void onClick(View v) { |
28 |
// TODO Auto-generated method stub |
29 |
Toast.makeText(getApplicationContext(), "点击的错误按钮" , 1 ).show(); |
最后看看我们自定义控件的效果吧!

点击后还有按下按钮的效果。
- android自定义控件实例(Linearlayout组合TextView和ImageView)
2013-12-18 11:25:22 转载自: http://www.open-open.com/lib/view/open1328836804515.html 很多时候android常用的控件不能 ...
- Android自定义控件实例,圆形头像(图库 + 裁剪+设置),上传头像显示为圆形,附源码
Android项目开发中经常会遇见需要实现圆角或者圆形的图片功能,如果仅仅使用系统自带的ImageView控件显然无法实现此功能,所以通过系列文章的形式由简到繁全方位的介绍一下此功能的实现,巩固一下自 ...
- Android自定义控件1
概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...
- 一起来学习Android自定义控件1
概述 Android已经为我们提供了大量的View供我们使用,但是可能有时候这些组件不能满足我们的需求,这时候就需要自定义控件了.自定义控件对于初学者总是感觉是一种复杂的技术.因为里面涉及到的知识点会 ...
- Android自定义控件(状态提示图表) (转)
源:Android自定义控件(状态提示图表) 源:Android应用开发 [工匠若水 http://blog.csdn.net/yanbober 转载烦请注明出处,尊重分享成果] 1 背景 前面分析 ...
- android自定义控件——以滑动开关为例
0.引言 (1)Android从4.0开始提供了switch的滑动开关效果组件,但是之前版本却没有 (2)很多时候我们写程序,都希望把有用的通用的通用的东西封装起来,以便以后重用. 本文根据组件开发思 ...
- Android自定义控件之自定义ViewGroup实现标签云
前言: 前面几篇讲了自定义控件绘制原理Android自定义控件之基本原理(一),自定义属性Android自定义控件之自定义属性(二),自定义组合控件Android自定义控件之自定义组合控件(三),常言 ...
- Android自定义控件之自定义组合控件
前言: 前两篇介绍了自定义控件的基础原理Android自定义控件之基本原理(一).自定义属性Android自定义控件之自定义属性(二).今天重点介绍一下如何通过自定义组合控件来提高布局的复用,降低开发 ...
- Android自定义控件之自定义属性
前言: 上篇介绍了自定义控件的基本要求以及绘制的基本原理,本篇文章主要介绍如何给自定义控件自定义一些属性.本篇文章将继续以上篇文章自定义圆形百分比为例进行讲解.有关原理知识请参考Android自定义控 ...
随机推荐
- 20个令人惊叹的音乐应用程序UI,值得收藏
我们无法想象世界上没有手机.他们已经成为日常生活中不可缺失的一部分.今天的手机可以让你不只是拨打电话和发送消息.它可以让你浏览网页空间,拍照,看书,听音乐等等. 回顾一下互联网,你会看到不同的音乐AP ...
- 让ie6(opera)支持微软雅黑字体
一.让IE6支持微软雅黑,添加一句声明: <html lang="zh-CN"> 在网页的HTML标签内加入红色部分的声明,就可以了. 二.让Opera浏览器支持微软 ...
- Mac下Sublime Text 总是以新窗口打开文件的解决办法
Mac下的Sublime有个毛病,经常打开后,之前打开的窗口都没了,太难受了. Windows/Linux下的sublime总是默认的以标签页的形式打开关联的文件,但是在Mac下使用Sublime打开 ...
- 【iOS】网络操作与AFNetworking
众所周知.苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来非常不方便. 不仅要做区分各种请求设置各种不同的參数,并且还要常常在多线程里操作,同一时候还要对请求与返回的 ...
- C#.NET常见问题(FAQ)-Visual Studio VS如何显示行号
工具-选项,然后勾选"显示所有设置",然后在文本编辑器下面找到所有语言,勾选"行号"即可. 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: ...
- wepy - 入手
wepy官方文档: https://tencent.github.io/wepy/document.html#/ ESLint:一般用来校验JavaScript代码是否符合规范,不符合预期就报错(程序 ...
- VMWare虚拟机“锁定文件失败“怎么办?
虚拟机突然蓝屏了,然后就启动不了了,提示"锁定文件失败,打不开磁盘或快照所依赖的磁盘"的解决方法: 如果使用VMWare虚拟机的时候突然系统崩溃蓝屏,有一定几率会导致无法启动,会提 ...
- Performance Testing
To test application performance, add rules using FiddlerScript to the OnBeforeResponse function (exc ...
- 设定StatusBar的文字成不同的颜色
设定StatusBar上的文字,该文字以StatusBar所在Form的字型设定为准,并以form的ForeColor为字的颜色,文字过长时,自动会截除这个程式的实质意义不太大,因为当文字被盖掉後需自 ...
- 快捷键jdeveloper
alt+home:定位文件ctrl+alt+space:代码自动提示alt+enter:自动导包ctrl+x:删除ctrl+-:类搜索ctrl+=:弹出当前打开列表ctrl+shift+back:最后 ...