declare-styleable是给自定义控件添加自定义属性用的

declare-styleable是给自定义控件添加自定义属性用的

1.首先,先写attrs.xml

复制代码
xml version="1.0" encoding="utf-8"?>
<resources>

    <declare-styleable name="TestAttr">
        <attr name="name" format="reference" />
        <attr name="age">
            <flag name="child" value="10" />
            <flag name="young" value="18" />
            <flag name="oldman" value="60" />
        attr>
        <attr name="textSize" format="dimension" />   
    declare-styleable>
resources>
复制代码
reference指的是是从string.xml引用过来
flag是自己定义的,类似于 android:gravity="top"
dimension 指的是是从dimension.xml里引用过来的内容.注意,这里如果是dp那就会做像素转换

2.在布局文件里的写法
复制代码
xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:attrstest="http://schemas.android.com/apk/res/com.arlos.attrstest"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >s

    <com.arlos.attrstest.MyTestView
        android:id="@+id/tvTest"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
         attrstest:name="@string/myname" 
         android:gravity="top"
         attrstest:age="young"
         attrstest:textSize="@dimen/aa"
        android:text="@string/hello" />

LinearLayout>
复制代码

 2.1 先引用这个dtd

xmlns:attrstest="http://schemas.android.com/apk/res/com.arlos.attrstest"
attrstest是随便写的.后面的包名是你所在的项目的根包.也就是在manifest里的com.arlos.attrstest

 2.2 在自定义的控件里写属性

3. 最后在控件的构造方法里取得这些值
复制代码
public class MyTestView extends TextView {

    public MyTestView(Context context, AttributeSet attrs) {
        super(context, attrs);

        TypedArray tArray = context.obtainStyledAttributes(attrs,
                R.styleable.TestAttr);
        String name = tArray.getString(R.styleable.TestAttr_name);
        System.out.println("name = " + name);
        int age = tArray.getInt(R.styleable.TestAttr_age, 200);
        System.out.println("age = " + age);
         float demin = tArray.getDimension(R.styleable.TestAttr_textSize,0);
         System.out.println("demin = " + demin);
        tArray.recycle();
    }
}
复制代码

declare-styleable中format详解

我们在做项目的时候,由于android自带的属性不能满足需求,android提供了自定义属性的方法,其中的format是做什么用的?以及如何使用它?下面列出一些常用的。

1. reference:参考某一资源ID。

    (1)属性定义:

           

                  

           

    (2)属性使用:

            

                     android:layout_width = "42dip"
                     android:layout_height = "42dip"
                     android:background = "@drawable/图片ID"

                     />

2. color:颜色值。

    (1)属性定义:

           

                  

           

    (2)属性使用:

           

                     android:layout_width = "42dip"
                     android:layout_height = "42dip"
                     android:textColor = "#00FF00"

                     />

3. boolean:布尔值。

    (1)属性定义:

           

                  

           

    (2)属性使用:

           

                    android:layout_width = "42dip"
                    android:layout_height = "42dip"

                    android:focusable = "true"

                    />

4. dimension:尺寸值。

    (1)属性定义:

           

                  

           

    (2)属性使用:

           

                    android:layout_width = "42dip"
                    android:layout_height = "42dip"

                    />

5. float:浮点值。

    (1)属性定义:

           

                  
                  

           

    (2)属性使用:

                               android:fromAlpha = "1.0"
                   android:toAlpha = "0.7"

                   />

6. integer:整型值。

    (1)属性定义:

           

                  
                  
                  
                  
                  
                  

           

    (2)属性使用:

           

                   xmlns:android = "http://schemas.android.com/apk/res/android" 
                   android:drawable = "@drawable/图片ID" 
                   android:pivotX = "50%" 
                   android:pivotY = "50%" 
                   android:framesCount = "12" 
                   android:frameDuration = "100"

                   />

7. string:字符串。

    (1)属性定义:

           
                  
           

    (2)属性使用:

                                android:layout_width = "fill_parent"
                    android:layout_height = "fill_parent"
                    android:apiKey = "0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"

                    />

8. fraction:百分数。

    (1)属性定义:

           
                  
                  
                  
                  
                  
                  
           

    (2)属性使用:

           

                   xmlns:android = "http://schemas.android.com/apk/res/android"
               android:interpolator = "@anim/动画ID"

                   android:fromDegrees = "0"
               android:toDegrees = "360"

                   android:pivotX = "200%"

                   android:pivotY = "300%"
               android:duration = "5000"

                   android:repeatMode = "restart"

                   android:repeatCount = "infinite"

                   />

9. enum:枚举值。

    (1)属性定义:

           
                  
                         
                         
                  
           

           

    (2)属性使用:

           

                    xmlns:android = "http://schemas.android.com/apk/res/android"
                    android:orientation = "vertical"
                    android:layout_width = "fill_parent"
                    android:layout_height = "fill_parent"
                    >
           

10. flag:位或运算。

     (1)属性定义:

            
                   
                           
                           
                           
                           
                           
                           
                           
                           
                           
                           
                    
        

            

     (2)属性使用:

           

                   android:name = ".StyleAndThemeActivity"
                   android:label = "@string/app_name"
                   android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">
                  
                         
                         
                  

            

特别要注意:

     属性定义时可以指定多种类型值。

    (1)属性定义:

           

                  

           

    (2)属性使用:

            

                     android:layout_width = "42dip"
                     android:layout_height = "42dip"
                     android:background = "@drawable/图片ID|#00FF00"

                     />

你可能感兴趣的:(attr,layout,界面布局)