zoukankan      html  css  js  c++  java
  • 【转】declare-styleable的使用(自定义控件) 以及declare-styleable中format详解

    原文网址:http://www.cnblogs.com/622698abc/p/3348692.html

    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)属性定义:

                <declare-styleable name = "名称">

                       <attr name = "background" format = "reference" />

                </declare-styleable>

        (2)属性使用:

                 <ImageView

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

                         />

    2. color:颜色值。

        (1)属性定义:

                <declare-styleable name = "名称">

                       <attr name = "textColor" format = "color" />

                </declare-styleable>

        (2)属性使用:

                <TextView

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

                         />

    3. boolean:布尔值。

        (1)属性定义:

                <declare-styleable name = "名称">

                       <attr name = "focusable" format = "boolean" />

                </declare-styleable>

        (2)属性使用:

                <Button

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

                        android:focusable = "true"

                        />

    4. dimension:尺寸值。

        (1)属性定义:

                <declare-styleable name = "名称">

                       <attr name = "layout_width" format = "dimension" />

                </declare-styleable>

        (2)属性使用:

                <Button

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

                        />

    5. float:浮点值。

        (1)属性定义:

                <declare-styleable name = "AlphaAnimation">

                       <attr name = "fromAlpha" format = "float" />
                       <attr name = "toAlpha" format = "float" />

                </declare-styleable>

        (2)属性使用:

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

                       />

    6. integer:整型值。

        (1)属性定义:

                <declare-styleable name = "AnimatedRotateDrawable">

                       <attr name = "visible" />
                       <attr name = "frameDuration" format="integer" />
                       <attr name = "framesCount" format="integer" />
                       <attr name = "pivotX" />
                       <attr name = "pivotY" />
                       <attr name = "drawable" />

                </declare-styleable>

        (2)属性使用:

                <animated-rotate

                       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)属性定义:

                <declare-styleable name = "MapView">
                       <attr name = "apiKey" format = "string" />
                </declare-styleable>

        (2)属性使用:

                <com.google.android.maps.MapView
                        android:layout_width = "fill_parent"
                        android:layout_height = "fill_parent"
                        android:apiKey = "0jOkQ80oD1JL9C6HAja99uGXCRiS2CGjKO_bc_g"

                        />

    8. fraction:百分数。

        (1)属性定义:

                <declare-styleable name="RotateDrawable">
                       <attr name = "visible" />
                       <attr name = "fromDegrees" format = "float" />
                       <attr name = "toDegrees" format = "float" />
                       <attr name = "pivotX" format = "fraction" />
                       <attr name = "pivotY" format = "fraction" />
                       <attr name = "drawable" />
                </declare-styleable>

        (2)属性使用:

                <rotate

                       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)属性定义:

                <declare-styleable name="名称">
                       <attr name="orientation">
                              <enum name="horizontal" value="0" />
                              <enum name="vertical" value="1" />
                       </attr>           

                </declare-styleable>

        (2)属性使用:

                <LinearLayout

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

    10. flag:位或运算。

         (1)属性定义:

                 <declare-styleable name="名称">
                        <attr name="windowSoftInputMode">
                                <flag name = "stateUnspecified" value = "0" />
                                <flag name = "stateUnchanged" value = "1" />
                                <flag name = "stateHidden" value = "2" />
                                <flag name = "stateAlwaysHidden" value = "3" />
                                <flag name = "stateVisible" value = "4" />
                                <flag name = "stateAlwaysVisible" value = "5" />
                                <flag name = "adjustUnspecified" value = "0x00" />
                                <flag name = "adjustResize" value = "0x10" />
                                <flag name = "adjustPan" value = "0x20" />
                                <flag name = "adjustNothing" value = "0x30" />
                         </attr>        

                 </declare-styleable>

         (2)属性使用:

                <activity

                       android:name = ".StyleAndThemeActivity"
                       android:label = "@string/app_name"
                       android:windowSoftInputMode = "stateUnspecified | stateUnchanged | stateHidden">
                       <intent-filter>
                              <action android:name = "android.intent.action.MAIN" />
                              <category android:name = "android.intent.category.LAUNCHER" />
                       </intent-filter>
                 </activity>

    特别要注意:

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

        (1)属性定义:

                <declare-styleable name = "名称">

                       <attr name = "background" format = "reference|color" />

                </declare-styleable>

        (2)属性使用:

                 <ImageView

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

                         />

    转 : http://www.cnblogs.com/carlosk/archive/2012/06/06/2538336.html

  • 相关阅读:
    cnblog项目--20190309
    django js引入失效问题
    Python老男孩 day16 函数(六) 匿名函数
    Python老男孩 day16 函数(五) 函数的作用域
    Python老男孩 day15 函数(四) 递归
    Python老男孩 day15 函数(三) 前向引用之'函数即变量'
    Python老男孩 day15 函数(二) 局部变量与全局变量
    Python老男孩 day14 函数(一)
    Python老男孩 day14 字符串格式化
    Python老男孩 day14 集合
  • 原文地址:https://www.cnblogs.com/wi100sh/p/4290461.html
Copyright © 2011-2022 走看看