Android 自定义属性
2014-12-05 14:42
281 查看
很多时候,系统提供给我们的控件属性不能很好的满足我们的需求。因此,我们就要学会自定义属性。这将极大方便我们使用。
一、 在res/values 文件下定义一个attrs.xml 文件.代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="android:textColor"/>//在自定义属性中使用Android自带的属性名字
<attr name="mytextSize" format="dimension"/>//自定义属性,format属性表示该属性的单位
</declare-styleable>
</resources>
该文件是定义属性名和格式的地方,需要用<declare-styleable name="MyView"></declare-styleable>包围所有属性。
其中name为该属性集的名字,主要用途是标识该属性集。那在什么地方会用到呢?这个等会再说。
format是表示属性的单位,再来看看各种属性都有些什么类型吧:
1.reference:引用资源
2.string:字符串,如果想既能直接写值也可以用类似"@string/test"引用资源的方式,可以写成format="string|reference"
3.Color:颜色
4.boolean:布尔值
5.dimension:尺寸值
6.float:浮点型
7.integer:整型
8.fraction:百分数
9.enum:枚举 ,如果你提供的属性只能让别人选择,不能随便传入,就可以写成这样
<attr name="language">
<enum name="china" value="1"/>
<enum name="English" value="2"/>
</attr>
10.flag:位或运算
如果该属性可同时传两种不同的属性,则可以用“|”分割开即可。
declare-styleable子元素:
定义一个styleable对象,每个styleable对象就是一组attr属性的集合 注意:这里的name属性并不是一定要和自定义类名相同,只是为了好区分对应类的属性而已。
注意:
上面的属性资源文件定义了该属性之后,至于到底是哪个自定义View组件中来使用该属性,该属性到底能发挥什么作用,就不归该属性资源文件管了,也就是说这个属性资源文件是个公共的,大家都可以用,但是为了方便管理,一般都是一个自定义View里的属性写成一个declare-styleable集合.属性资源所定义的属性到底可以返回什么作用,取决于自定义组件的代码实现。
二、在MyView类中是这样实现的:
/*这里取得declare-styleable集合*/
TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyView);
/*这里从集合里取出相对应的属性值,第二参数是如果使用者没用配置该属性时所用的默认值*/
int textColor = a.getColor(R.styleable.MyView_android_textColor, 0xff0000);
float textSize = a.getDimension(R.styleable.MyView_mytextSize, 36);
/*回收资源*/
a.recycle();
在获取某属性标识时,用到"R.styleable.MyView_mytextSize",很显然,在每个属性前面都加了"MyView_"。
三、将我们自定义的MyView加入布局main.xml 文件中,使用自定义属性,自定义属性必须加上:
xmlns:test ="http://schemas.android.com/apk/res/com.example.demo" 紫色的test是自定义属性的前缀,红色com.example.demo
是我们包名。
main.xml 全部代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:test="http://schemas.android.com/apk/res/com.example.demo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<com.example.demo.MyView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
test:mytextSize="20dp"//自定义属性
android:textColor="#fff">
</com.example.demo.MyView>
</LinearLayout>
一、 在res/values 文件下定义一个attrs.xml 文件.代码如下:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="MyView">
<attr name="android:textColor"/>//在自定义属性中使用Android自带的属性名字
<attr name="mytextSize" format="dimension"/>//自定义属性,format属性表示该属性的单位
</declare-styleable>
</resources>
该文件是定义属性名和格式的地方,需要用<declare-styleable name="MyView"></declare-styleable>包围所有属性。
其中name为该属性集的名字,主要用途是标识该属性集。那在什么地方会用到呢?这个等会再说。
format是表示属性的单位,再来看看各种属性都有些什么类型吧:
1.reference:引用资源
2.string:字符串,如果想既能直接写值也可以用类似"@string/test"引用资源的方式,可以写成format="string|reference"
3.Color:颜色
4.boolean:布尔值
5.dimension:尺寸值
6.float:浮点型
7.integer:整型
8.fraction:百分数
9.enum:枚举 ,如果你提供的属性只能让别人选择,不能随便传入,就可以写成这样
<attr name="language">
<enum name="china" value="1"/>
<enum name="English" value="2"/>
</attr>
10.flag:位或运算
如果该属性可同时传两种不同的属性,则可以用“|”分割开即可。
declare-styleable子元素:
定义一个styleable对象,每个styleable对象就是一组attr属性的集合 注意:这里的name属性并不是一定要和自定义类名相同,只是为了好区分对应类的属性而已。
注意:
上面的属性资源文件定义了该属性之后,至于到底是哪个自定义View组件中来使用该属性,该属性到底能发挥什么作用,就不归该属性资源文件管了,也就是说这个属性资源文件是个公共的,大家都可以用,但是为了方便管理,一般都是一个自定义View里的属性写成一个declare-styleable集合.属性资源所定义的属性到底可以返回什么作用,取决于自定义组件的代码实现。
二、在MyView类中是这样实现的:
/*这里取得declare-styleable集合*/
TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyView);
/*这里从集合里取出相对应的属性值,第二参数是如果使用者没用配置该属性时所用的默认值*/
int textColor = a.getColor(R.styleable.MyView_android_textColor, 0xff0000);
float textSize = a.getDimension(R.styleable.MyView_mytextSize, 36);
/*回收资源*/
a.recycle();
在获取某属性标识时,用到"R.styleable.MyView_mytextSize",很显然,在每个属性前面都加了"MyView_"。
三、将我们自定义的MyView加入布局main.xml 文件中,使用自定义属性,自定义属性必须加上:
xmlns:test ="http://schemas.android.com/apk/res/com.example.demo" 紫色的test是自定义属性的前缀,红色com.example.demo
是我们包名。
main.xml 全部代码如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:test="http://schemas.android.com/apk/res/com.example.demo"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<com.example.demo.MyView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
test:mytextSize="20dp"//自定义属性
android:textColor="#fff">
</com.example.demo.MyView>
</LinearLayout>
相关文章推荐
- Android 中自定义属性(attr.xml,TypedArray)的使用
- Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用!
- Android中自定义属性的使用------res/values文件下定义一个attrs.xml
- Android中自定义属性(attrs.xml,TypedArray的使用)
- android自定义属性
- Android中自定义属性(attrs.xml,TypedArray的使用)
- android自定义控件(三) 自定义属性
- Android 中自定义属性(attr.xml,TypedArray)的使用!
- Android中自定义属性(attrs.xml,TypedArray的使用)
- Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用!
- Android 中自定义属性(attr.xml,TypedArray)的使用
- Android 中自定义属性(attr.xml,TypedArray)的使用!
- Android中自定义属性的使用
- Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用!
- Android高手进阶教程(四)之 ----Android 中自定义属性(attr.xml,TypedArray)的使用
- Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用!(转载)
- Android中自定义属性的两种方法
- android自定义控件(三) 增加内容 自定义属性 format详解
- Android中自定义属性的使用
- Android高手进阶教程(四)之----Android 中自定义属性(attr.xml,TypedArray)的使用!