Android自定义组合控件的实现

需求:在黑马做安全卫士的时候,功能9设置中心界面如下:

在点击item的时候,复选框会反转状态,同时"自动更新已经关闭"会变换内容和颜色。




    		    Android自定义组合控件的实现

可以发现这个界面类似ListView,但又不是ListView,因为它的item数量是固定的,且最后一

item和之前的都不一样。虽然这个看着像是标准的List结构,实则每个item不是完全一样,因为

每个item的提示文本(如"自动更新已经关闭")的内容并不完全一样。

假如用一般方式来布局的话,4个item就会有3*4 = 12个view,就会有多个findViewById()和

onClick事件。那么程序就会显得十分的臃肿和冗余。

假如用ListView来布局的话,4个item就会有4个view,给item项添加item点击事件即可。但是

上面已经说到,4个item并不是完全标准的ListView的item,每个item项的提示文本内容是独立

的。如果一定要用ListView来实现的话,那么只要多声明两个数组来存放复选框两种状态各个

item的提示信息。虽然ListView也能实现想要的功能,但是有点大材小用的感觉,而且复用性差.

为了解决上面这一问题,于是自定义组合控件的技术出现了。

1. 什么是自定义组合控件

自定义组合控件,还不如说是自定义组合控件类。就是将多个控件封装到一个容器里,将整个容

器看作一个控件。所有的控件还是用代码,用相应的类来实现的。

■自定义组合控件的特点

1) 冗余度低

2)复用性强

2. 自定义组合控件的实现




    		    Android自定义组合控件的实现

将每个item看作一个自定义组合控件,它应该有title、desc_on、desc_off、check四个属性。

将不同状态的提示文本属性信息封装在控件里,这样比较适于管理和控制。

1)设计自定义控件的布局

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#F0F0F0" >

<!-- 标题 -->

<TextView
android:id="@+id/tv_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dp"
android:layout_marginTop="5dp"
android:text="标题"
android:textSize="20dp"
android:textStyle="bold" />
<!-- 描述 -->

<TextView
android:id="@+id/tv_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignLeft="@id/tv_title"
android:layout_below="@id/tv_title"
android:layout_marginTop="5dp"
android:text="描述"
android:textSize="15dp" />
<!-- 复选框 -->
<!-- 将下面的两个属性设置为false,可以屏蔽复选框的点击事件。因为我想通过点击整个自定义控件从而控制复选框的变化。 -->
<!-- android:clickable="false" -->
<!-- android:focusable="false" -->

<CheckBox
android:id="@+id/cb_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_marginRight="5dp"
android:clickable="false"
android:focusable="false" />

</RelativeLayout>

布局效果:




    		    Android自定义组合控件的实现

2)创建自定义控件类继承布局




    		    Android自定义组合控件的实现

3)创建项目的自定义命名空间文件

■系统的命名空间

每个布局都要有


    		    Android自定义组合控件的实现

其实这个属性指向的是一个系统自带的attr.xml文件,在系统的values文件夹目录下,它指定了什么控件

会有什么属性。




    		    Android自定义组合控件的实现

系统自带的这个attr.xml文件里,定义了系统自带的所有控件的属性。

系统attr.xml文件的根结点标签




    		    Android自定义组合控件的实现

比如ImageView控件




    		    Android自定义组合控件的实现

控件是用<declare-styleable>标签来声明的,用<attr>标签指定控件的属性。

■自定义的命名空间

参照系统的自定义命名空间文件的格式,在自己的项目里values文件夹下新建一个

同样名称的attr.xml文件




    		    Android自定义组合控件的实现

可以在values目录下新建attr.xml文件的时候,会自动提示根标签resources,与

系统自带的attr.xml文件格式一样。

声明自定义控件及其属性


本文出自 “行意天下” 博客,请务必保留此出处http://4259297.blog.51cto.com/4249297/1683192

更多相关文章
  • 这个文件用来记录用户 用户在线个数 以及用户名密码  import java.util.HashMap;  import java.util.Iterator;  import java.util.Map;  import java.util.Set;    import org.apache.co ...
  • 易网科技讯 11月16日消息,当当网(NYSE:DANG)今日发布截至9月30日的2011财年第三季度财务报告.财报显示,当当网第三季度总营收为人民币9.089亿元(约合1.425亿美元),与去年同期相比增长50%.第三季度净亏损为7340万人民币(约合1150万美元),去年同期为净利润3270万元 ...
  •         前段时间刷题中,无意发现自己对多维数组和指针的关系不是很明确,开始google,没发现太靠谱的,于是翻书,果然在<C Primer Plus>中找到一段,分析的如此透彻,是不是这个太基础了,以至于别人都不愿意在网上写出来,以下摘自书中,并加上自己的理解:  分析 指针和多 ...
  • 解密木马复活技术(程序被删还会还原) 发现程序会创建一个ShieldThread线程 跟踪下去发现它会把自身读取到一个分配的内存空间,然后每个一段时间判断自身文件是否存在 如果不存在就从内存中写出文件.具体代码如下 view plaincopy to clipboardprint?//     DW ...
  • SqlServer:单用户模式下查杀相关进程实现单/多用户转换   SQLServer下,单/多用户模式转换的三种方法:     1.直接在Management Studio中设置相关数据库的Properties:Options-->Restrict Access下设置MULTI/SINGLE ...
  • Linux系统中很多东西都是以脚本代码.配置文件的形式存在,使用Linux系统时,需经常对这些文件进行编辑.很显然,如果没有文本编辑器,江湖之路寸步难行. 我的选择是Vim.Vim是Linux系统上的最著名的文本/代码编辑器,也是早年的Vi编辑器的加强版,被誉为文本/代码编辑器之中最为优秀经典的上古 ...
一周排行
  • 现在网络技术的不断发展和进步,大数据时候的到来,让网络带宽迅速增加.正因为时代的进步,给了网络和流媒体技术大展身手和展现的机会,同也也为校园视频直播网络传送音视频数据打下了良好的基础.信息数字化教育的教育方式的转变, ...
  • DB2中出现SQL1032N错误现象时的解决办法   我的原因很简单...   因为我修改了..db2建立时的用户,导致了这个问题....   www.2cto.com   解决方法很简单...   去控制面板-&g ...
  • 感谢朋友支持本博客,欢迎共同探讨交流,由于能力和时间有限,错误之处在所难免,欢迎指正!如果转载,请保留作者信息.博客地址:http://blog.csdn.net/gaoxingnengjisuan邮箱地址:dong ...
  • Fruit Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s ...
  • 北京商报讯(记者 邵蓝洁)从导购转型女性时尚电商的美丽说再次定位于时尚发现平台,扩充品类摆脱单一女性品类成为当务之急.北京商报记者了解到,美丽说已经开始向小家电.绿植.童装.男装等七个品类进行商家招募.同时,美丽说也 ...
  • Win7/Win8因网络配置导致无法上网的解决办法   相信大家在使用Win7或者Win8操作系统的电脑上网的时候有时候会遇到上不去网,在电脑的网络小图标有个小叹号,出现这样的情况,大家通常回去看自家的路由器是否出现 ...
  • 数据中心在经历了1.0阶段的计算.存储大集中,经历了2.0阶段的计算.存储.数据三网分离,已正式进入了全新的3.0阶段.与1.0.2.0阶段一样,3.0阶段的数据中心网络也将是一个伴随企业业务发展,为数据中心带来许多 ...
  • 总部设立在美国加利福尼亚州圣何塞的思科公司目前仍旧是全球第一的网络设备提供商,凭借在统一计算系统UCS上的良好销售成绩,思科透露其第三季度财务业绩将再次超出华尔街分析师的预期. 2月8日,思科公布的第二财季销售额为1 ...
  • 做了一个A+B的APP,虽然很简单,但是作为初学者还是弄了几个小时才弄好,什么东西都要看书或者百度,但最后成功了,还是很开心的,收货蛮大的.现在把过程写一下: 首先给出效果图: 一开始布局一直有问题,不知道为什么我定 ...
  • telnet启动步骤如下: 1.如果安装了telnet.telnet-server的rpm包,就跳到2.,否则安装这个包. 2.修改telnet服务配置文件 vi /etc/xinetd.d/telnet servi ...