Android实例-手机安全卫士(九)-自定义组合控件的属性

一、目标。

  在布局文件中使用自定义控件时,直接在属性中设置值,类似于在TextView控件中设置text属性来显示文本。

效果如图:

    

属性设置:

二、代码实现。

  1、自定义命名空间,类似于TextView控件里面android:text属性前的android。在需要放置自定义控件的布局文件的布局方式(LinearLayout、RelativeLayout等均可)属性里,参照android的命名空间样式增加自定义的命名空间,其名称可以随便取(本例中取名custom),代码是:xmlns:custom="http://schemas.android.com/apk/res/<包名>",其中包名是全称(即配置AndroidManifest.xml里面的package="<包名>")。

自定义命名空间代码:

1 xmlns:custom="http://schemas.android.com/apk/res/com.example.mobilesafe"

因此,LinearLayout属性里的代码为:

1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
2     xmlns:custom="http://schemas.android.com/apk/res/com.example.mobilesafe"
3     android:layout_width="match_parent"
4     android:layout_height="match_parent"
5     android:orientation="vertical" >

  2、定义属性(本例中的title、checkbox_on、checkbox_off)。(可结合android源代码中的TextView组件属性的设置进行编写,地址为sdk里面的platforms\android-18\data\res\values.xml文件中,查找<declare-styleable name="TextView">的标签,可照着里面的 <attr name="password" format="boolean" />标签进行编写)。

    ①.在values文件夹下新建一个xml文件(注意是Android XML File类型文件),取名为arrts。

    ②.在arrts.xml文件中的<resources>标签下建立 <declare-styleable>标签,在 <declare-styleable>标签下再建立<attr/>标签。<attr/>标签用于自定义属性名和类型,所以它的数量可以根据需要增加,本例中未三个(title、checkbox_on、checkbox_off)。

    ③.在<attr/>标签属性中,增加name和format等标签属性,name的值就是自定义控件属性名(title、checkbox_on、checkbox_off),format的值就是自定义控件的格式(均为string),其他的标签属性可参照TextView控件的编写。

attrs.xml文件的代码:

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <resources>
 3
 4     <declare-styleable name="TextView">
 5         <attr name="title" format="string" />
 6         <attr name="check_off" format="string" />
 7         <attr name="check_on" format="string" />
 8     </declare-styleable>
 9
10 </resources>

  3、将定义的属性与自定义控件类关联。自定义控件(包括系统控件TextView等)在放入布局文件中时均需要实例化自定义控件类(SettingItemView),此时会调用自定义控件类中带有两个参数的构造方法SettingItemView(Context context, AttributeSet attrs),而带有三个参数的构造方法在需要传入样式的时候调用,带有一个参数的构造方法在new的时候调用。布局文件在调用自定义控件时会将里面的属性封装成AttributeSet类型(attrs)的属性集合(是个String类型的数组),因此可以通过AttributeSet类型(attrs)的相关方法取得其中的属性。

    ①.在SettingItemView(Context context, AttributeSet attrs)方法中通过AttributeSet类型(attrs)的getAttributeValue(String namespace, String name)方法获得属性的值,该方法中参数namespace是命名空间,也就是想要获得值的属性所在的命名空间(本例中就是自定义(custom)的命名空间"http://schemas.android.com/apk/res/com.example.mobilesafe"),参数name是想要取值的属性名。该方法的String类型返回值就是所需属性的值。

    ②.在SettingItemView类中定义String类型的常员变量(title、check_off、check_on),然后再将getAttributeValue方法返回的值赋给这些常员变量。

    ③.最后通过TextView对象(setting_update_title)的setText方法将②中的返回值(title)填入,而另两个返回值(check_off、check_on)是根据CheckBox的状态情况进行实时改变的,所以放在setChecked(boolean checked)方法中。

SettingItemView(Context context, AttributeSet attrs)方法的代码如下:

1 public SettingItemView(Context context, AttributeSet attrs) {
2         super(context, attrs);
3         iniView(context);
4         title = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.example.mobilesafe", "title");
5         check_off = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.example.mobilesafe", "check_off");
6         check_on = attrs.getAttributeValue("http://schemas.android.com/apk/res/com.example.mobilesafe", "check_on");
7         setting_update_title.setText(title);
8     }

    ④.根据CheckBox的状态实时改变文本内容。在setChecked(boolean checked)方法中通过if..语句判断CheckBox的状态,再通过setContent(String text)方法并传入返回值从而设置显示信息。

setChecked(boolean checked)方法的代码如下:

1 public void setChecked(boolean checked){
2         if(checked){
3             setContent(check_on);
4         }else{
5             setContent(check_off);
6         }
7         setting_update_checkbox.setChecked(checked);
8     }

三、扩展。

  再定义两个自定义控件的属性(content、checked)用于指定content的默认显示内容和CheckBox的默认选中状态(true或false)。提示:在关联控件和类时采用AttributeSet(arrts)的getAttributeBooleanValue方法用于返回boolean类型的值。

时间: 2024-11-08 16:33:21

Android实例-手机安全卫士(九)-自定义组合控件的属性的相关文章

android项目自定义组合控件添加属性

首先要在values文件下新建立一个文件arrts.xml,这个文件就是用来说明键名称是做什么的,和值的类型 <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="SeetingView"> <attr name="up" format="string" /> &

Android自定义组合控件--底部多按钮切换

效果图: 现在市场上大多数软件都是类似于上面的结构,底部有几个按钮用于切换到不同的界面.基于OOP思想,我想把下面的一整块布局封装成一个类,也就是我们的自定义组合控件-底部多按钮切换布局,我把它叫做BottomLayout 看上面的布局,几个按钮横向排列,我们先看一下布局 最外面LinearLayout 方向 horizontal,然后5个weight相同的RelativeLayout,每个RelativeLayout里面有一个Button(用了显示选中状态)个ImageView(用来显示红点)

Android自定义组合控件--图片加文字,类似视频播放软件的列表

分四步来写: 1,组合控件的xml; 2,自定义组合控件的属性; 3,自定义继承组合布局的class类,实现带两参数的构造器; 4,在xml中展示组合控件. 具体实现过程: 一.组合控件的xml 我接触的有两种方式,一种是普通的Activity的xml:一种是父节点为merge的xml.我项目中用的是第一种,但个人感觉第二种好,因为第一种多了相对或者绝对布局层. 我写的 custom_pictext.xml <?xml version="1.0" encoding="u

自定义组合控件和在自定义控件中使用自定义属性

今天,整理了一下我平时的笔记,写一个比较简单的自定义组合控件,仅供小白参考,大神请绕道,希望能够对大家有一些帮助 首先,得明白为什么我们需要自定义组合控件,它是因为原有控件并不能满足开发的需求,或者说并不能达到我们想要的一种效果,这个时候,就需要我们自己定义一些控件,以达到目的 ![先来看一下效果](http://img.blog.csdn.net/20160716224219109) 个人总结自定义控件的步骤: 1.先写一个布局,这里我用的是一个相对布局,我这里的相对布局就是根布局了 <?xm

Android实例-手机安全卫士(七)-自定义组合控件

一.目标. 将多个系统控件(TextView.Button.CheckBox等)组合成一个自定义的控件,并像系统控件一样使用.如图所示第1个自动更新控件是根据相对布局放置而成的,第2个自动更新控件即为自定义组合控件,它可以想一般的TextView等系统控件一样重复使用. 自定义控件如图: 二.代码实现. 1.在layout文件夹下新建一个xml文件(取名model_setting_item.xml),用于保存自定义控件的布局. 2.在新建的xml文件(model_setting_item.xml

Android 手机卫士--自定义组合控件构件布局结构

由于设置中心条目中的布局都很类似,所以可以考虑使用自定义组合控件来简化实现 本文地址:http://www.cnblogs.com/wuyudong/p/5909043.html,转载请注明源地址. 自定义组合控件 1.将已经编写好的布局文件,抽取到一个类中去做管理,下次还需要使用此布局结构的时候,直接使用组合控件对应的对象. 2.将组合控件的布局,抽取到单独的一个xml中 新建布局文件:setting_item_view.xml,将上篇文章中布局文件中的代码放进去 <?xml version=

Android 自定义组合控件小结

引言 接触Android UI开发的这段时间以来,对自定义组合控件有了一定的了解,为此小结一下,本文小结内容主要讨论的是如何使用Android SDK提供的布局和控件组成一个功能完整组合控件并将其封装为面向对象的类,而并非讨论如何继承自SDK提供的控件类(比如TextView),对其进行自定义扩展的问题. 进入正题前,我们先来看一组功能需求 假设在手机需求上,那么如上三个界面我们可以使用三个Activity,每个Activity一个布局文件,实现起来比较独立,但是假设在Android pad上要

Android自定义组合控件的实现

需求:在黑马做安全卫士的时候,功能9设置中心界面如下: 在点击item的时候,复选框会反转状态,同时"自动更新已经关闭"会变换内容和颜色. 可以发现这个界面类似ListView,但又不是ListView,因为它的item数量是固定的,且最后一 item和之前的都不一样.虽然这个看着像是标准的List结构,实则每个item不是完全一样,因为 每个item的提示文本(如"自动更新已经关闭")的内容并不完全一样. 假如用一般方式来布局的话,4个item就会有3*4 = 1

Android实例-手机安全卫士(十八)-完成设置向导的4个UI和跳转事件

一.目标. 制作向导设置里面每一步的UI布局及点击事件控制. 1.使用自定义button背景.自定义组合控件.自定义文本样式等. 2.利用SharedPreferences对象,设置应用程序配置信息(向导设置完成后就不再进入)           二.代码实现. 1.在程序包下新建另外3个UI的类(分别为SetupWizard_ui_2.java.SetupWizard_ui_3.java.SetupWizard_ui_4.java),并在配置文件中注册Activity. 2.根据UI设计,在设