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

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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息