Android自定义属性时TypedArray的使用方法


有时候Android传统的页面布局不足以满足我们的需求,常常需要自己定义view,通常继承View,然后重写构造方法以及onDraw等函数,再具体实现自己定义的复杂view。我们知道在给控件赋属性时,通常使用的是android系统自带的属性,比如 android:layout_height="wrap_content",除此之外,我们亦可以自己定义属性,这样在使用的时候我们就可以使用形如 myapp:myTextSize="20sp"的方式了,步骤大致如下:

1》在项目文件res/value下面创建一个attr.xml文件,该文件中包含若干个attr集合,例如:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="MyView">
        <attr name="myTextSize" format="dimension"/>
        <attr name="myColor" format="color"/>
    </declare-styleable>
</resources>

其中resource是跟标签,可以在里面定义若干个declare-styleable,<declare-styleable name="MyView">中name定义了变量的名称,下面可以再自定义多个属性,针对<attr name="myTextSize" format="dimension"/>来说,其属性的名称为"myTextSize",format指定了该属性类型为dimension,只能表示字体的大小。
 
format还可以指定其他的类型比如;
 
reference  表示引用,参考某一资源ID
 string  表示字符串
 color  表示颜色值
 dimension  表示尺寸值
 boolean  表示布尔值
 integer  表示整型值
 float  表示浮点值
 fraction  表示百分数
 enum  表示枚举值
 flag  表示位运算
 
2》在使用到该自定义view的布局文件中键入如下的一行:
 
xmlns:myapp=http://schemas.android.com/apk/res/com.eyu.attrtextdemo绿色是自己定义属性的前缀名字,粉色是项目的包名,这样一来,在我们自己定义的view的属性中,就可以使用自己在attr中定义的属性啦,例如:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:myapp="http://schemas.android.com/apk/res/com.eyu.attrtextdemo"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />
    <com.eyu.attrtextdemo.MyView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        myapp:myTextSize="20sp"
        myapp:myColor="#324243"/>

</LinearLayout>

  • 1
  • 2
  • 下一页

相关内容