您的位置:首页 > 移动开发 > Android开发

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 控件应用类中找到属性的值

/*********************************

附:在控件中若声明没有命名空间的属性时,系统并不会出现报错信息
但在视图中通过同样的方式可获取该属性的值
但对于字符串或布尔类型类似的属性可正常获取,
而类似引入连接比如图片资源的引用,获取到的值是所配置的字符串信息,
系统并没有进行相应的转换

**********************************/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: