android attrs组件自定义属性
2014-07-12 23:20
253 查看
自定义控件 自定义属性
步骤1:建立自定义控件类,如继承View的类,并复写
public MyView(Context context, AttributeSet attrs){}构造方法
步骤2:在values目录下建立attrs.xml文件,内容格式如下:
步骤3:在布局中建立自定义控件,控件名称为该自定义视图类的类名(包括包名)
步骤4:在布局文件开始部分声明命名空间,格式见下方实例
步骤5:步骤1中的构造方法中通过
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyToggleBtn);
获得自定义的属性,再根据迭代后
for (int i = 0; i < ta.getIndexCount(); i++) {}
获取相对应的自定义属性的值。
以下是一个实例
//step1 attrs.xml文件内容
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 声名属性集的名称 -->
<declare-styleable name="MyToggleBtn">
<!-- 声名一个属性 name是my_background 类型为 引用类型 引用资源ID -->
<attr name="my_background" format="reference" />
<!-- 声名一个属性 name是my_slide_btn 类型为 引用类型 引用资源ID -->
<attr name="my_slide_btn" format="reference" />
<!-- 声名一个属性 name是curr_state 类型为 boolean 类型-->
<attr name="curr_state" format="boolean" />
</declare-styleable>
</resources>
//step2 布局文件中建立控件并定义自定义属性
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gymyung="http://schemas.android.com/apk/res/com.g36bk.viewtest"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.g36bk.viewtest.View.ToggleView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
gymyung:curr_state="true"
gymyung:my_background="@drawable/switch_background"
gymyung:my_slide_btn="@drawable/slide_button"
/>
</RelativeLayout>
/**
参数解释:
声明命名空间:xmlns:gymyung="http://schemas.android.com/apk/res/com.g36bk.viewtest"
格式:xmlns(xml name space):gymyung(前缀)="http://schemas.android.com/apk/res/(固定写法)com.g36bk.viewtest(程序包名)"
定义自定义控件:<com.g36bk.viewtest.View.ToggleView />
定义自定义属性:gymyung:curr_state="true"
gymyung:my_background="@drawable/switch_background"
gymyung:my_slide_btn="@drawable/slide_button"
*/
//step3 控件应用类中找到属性的值
/**
参数解释:
声明命名空间:xmlns:gymyung="http://schemas.android.com/apk/res/com.g36bk.viewtest"
格式:xmlns(xml name space):gymyung(前缀)="http://schemas.android.com/apk/res/(固定写法)com.g36bk.viewtest(程序包名)"
定义自定义控件:<com.g36bk.viewtest.View.ToggleView />
定义自定义属性:gymyung:curr_state="true"
gymyung:my_background="@drawable/switch_background"
gymyung:my_slide_btn="@drawable/slide_button"
*/
//step3 控件应用类中找到属性的值
/*********************************
附:在控件中若声明没有命名空间的属性时,系统并不会出现报错信息
但在视图中通过同样的方式可获取该属性的值
但对于字符串或布尔类型类似的属性可正常获取,
而类似引入连接比如图片资源的引用,获取到的值是所配置的字符串信息,
系统并没有进行相应的转换
**********************************/
步骤1:建立自定义控件类,如继承View的类,并复写
public MyView(Context context, AttributeSet attrs){}构造方法
步骤2:在values目录下建立attrs.xml文件,内容格式如下:
步骤3:在布局中建立自定义控件,控件名称为该自定义视图类的类名(包括包名)
步骤4:在布局文件开始部分声明命名空间,格式见下方实例
步骤5:步骤1中的构造方法中通过
TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.MyToggleBtn);
获得自定义的属性,再根据迭代后
for (int i = 0; i < ta.getIndexCount(); i++) {}
获取相对应的自定义属性的值。
以下是一个实例
//step1 attrs.xml文件内容
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!-- 声名属性集的名称 -->
<declare-styleable name="MyToggleBtn">
<!-- 声名一个属性 name是my_background 类型为 引用类型 引用资源ID -->
<attr name="my_background" format="reference" />
<!-- 声名一个属性 name是my_slide_btn 类型为 引用类型 引用资源ID -->
<attr name="my_slide_btn" format="reference" />
<!-- 声名一个属性 name是curr_state 类型为 boolean 类型-->
<attr name="curr_state" format="boolean" />
</declare-styleable>
</resources>
//step2 布局文件中建立控件并定义自定义属性
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:gymyung="http://schemas.android.com/apk/res/com.g36bk.viewtest"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<com.g36bk.viewtest.View.ToggleView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
gymyung:curr_state="true"
gymyung:my_background="@drawable/switch_background"
gymyung:my_slide_btn="@drawable/slide_button"
/>
</RelativeLayout>
/**
参数解释:
声明命名空间:xmlns:gymyung="http://schemas.android.com/apk/res/com.g36bk.viewtest"
格式:xmlns(xml name space):gymyung(前缀)="http://schemas.android.com/apk/res/(固定写法)com.g36bk.viewtest(程序包名)"
定义自定义控件:<com.g36bk.viewtest.View.ToggleView />
定义自定义属性:gymyung:curr_state="true"
gymyung:my_background="@drawable/switch_background"
gymyung:my_slide_btn="@drawable/slide_button"
*/
//step3 控件应用类中找到属性的值
/**
参数解释:
声明命名空间:xmlns:gymyung="http://schemas.android.com/apk/res/com.g36bk.viewtest"
格式:xmlns(xml name space):gymyung(前缀)="http://schemas.android.com/apk/res/(固定写法)com.g36bk.viewtest(程序包名)"
定义自定义控件:<com.g36bk.viewtest.View.ToggleView />
定义自定义属性:gymyung:curr_state="true"
gymyung:my_background="@drawable/switch_background"
gymyung:my_slide_btn="@drawable/slide_button"
*/
//step3 控件应用类中找到属性的值
/*********************************
附:在控件中若声明没有命名空间的属性时,系统并不会出现报错信息
但在视图中通过同样的方式可获取该属性的值
但对于字符串或布尔类型类似的属性可正常获取,
而类似引入连接比如图片资源的引用,获取到的值是所配置的字符串信息,
系统并没有进行相应的转换
**********************************/
相关文章推荐
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- Android 两种为自定义组件添加属性的使用方法和区别
- 【android 开发知识积累】——属性(Attribute)资源的使用和自定义View组件
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- Android中自定义组件及自定义属性
- Android 两种为自定义组件添加属性的使用方法和区别
- Android 使用自定义组件和自定义属性
- Android自定义组件简单实例(自定义属性)
- 对于android中自定义组件属性的理解
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- android 自定义属性通过反射关联组件与方法
- [Android]自定义组件示例:使用attrs.xml文件定制RadioButton
- Android 两种为自定义组件添加属性的使用方法和区别
- Android中自定义组件和它的属性
- 说说Android 两种为自定义组件添加属性的使用方法和区别 推荐
- [Android]自定义组件示例:使用attrs.xml文件定制RadioButton
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- Android定制组件之图文 (自定义组件图) + TableLayout属性
- Android 自定义属性 attrs.xml
- Android 自定义VIEW属性用法详解(attrs、TypedArray)