自定义控件学习:设置自定义控件的属性

决定由浅入深的来学习与Android自定义控件有关的知识。首先先从如何设置自定义控件的属性开始吧。


实现的效果:

        像系统控件一样,可以在布局文件中设置控件的属性。


实现步奏:

一、在res/values中添加
二、在布局文件中引用
三、在代码中取值
下面开始具体的详细步奏:


一、在res/values中添加

res/ values/ attrs xml文件中添加如下字段:(若没有该文件,则创建)

内容如下:

 

<?xml version="1.0" encoding="utf-8"?>

<resources>

    <declare-styleable name="一般为自定义控件的名字">

    <attr name="自定义名称"

        format="在布局文件中需要输入的值的类型,详见下表"/>

     <attr name="width"
        format="dimension"/>
     ...

  </declare-styleable>

</resources>




  
Format 字段值汇总

1.定义:

    <declare-styleable name="My">

        <attr name="label" format="reference">

    </declare-styleable>

2.使用:

1

    <Buttonzkx:label="@string/label">

二、Color:颜色

1.定义:

1

2

3

    <declare-styleable name="My">

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

    </declare-styleable>

2.使用:

1

    <Button zkx:textColor="#ff0000"/>

三、boolean:布尔值

1.定义:

1

2

3

    <declare-styleable name="My">

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

    </declare-styleable>

2.使用:

1

    <Button zkx:isVisible="false"/>

四、dimension:尺寸值

1.定义:

1

2

3

    <declare-styleable name="My">

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

    </declare-styleable>

2.使用:

1

    <Button zkx:myWidth="100dip"/>

五、float:浮点型

1.定义:

1

2

3

    <declare-styleable name="My">

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

    </declare-styleable>

2.使用:

1

    <alpha zkx:fromAlpha="0.3"/>

六、integer:整型

1.定义:

1

2

3

    <declare-styleable name="My">

        <attr name="frameDuration" format="integer"/>

    </declare-styleable>

2.使用:

1

    <animated-rotate zkx:framesCount="22"/>

七、string:字符串

1.定义:

1

2

3

    <declare-styleable name="My">

        <attr name="Name" format="string"/>

    </declare-styleable>

2.使用:

1

    <rotate zkx:pivotX="200%"/>

八、fraction:百分数

1.定义:

1

2

3

    <declare-styleable name="My">

        <attr name="pivotX" format="fraction"/>

    </declare-styleable>

2.使用:

1

    <rotate zkx:Name="My name is zhang kun xiang"/>

九、enum:枚举

1.定义:

1

2

3

4

5

    <declare-styleable name="My">

        <attr name="language">

            <enum name="English" value="1"/>

        </attr>

    </declare-styleable>

2.使用:

1

    <Button zkx:language="English"/>

十、flag:位或运算

1.定义:

1

2

3

4

5

6

    <declare-styleable name="My">

        <attr name="windowSoftInputMode">

     <flag name="stateUnspecified" value="1"/>

     <flag name = "adjustNothing" value = "0x30"/>

        </attr>

    </declare-styleable>

2.使用:

1

    <activity android:windowSoftInputMode="stateUnspecified | adjustNothing">

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

1

2

3

    <declare-styleable name = "名称">    

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

    </declare-styleable>

使用:

1

    <ImageView android:background = "@drawable/图片ID|#00FF00"/>


注:以上汇总列表引用自nicGithub大神的declare-styleable:自定义控件的属性


二、在布局文件中引用

引用之前需要先做声明,就像是我们常见到的系统声明:xmlns:android="http://schemas.android.com/apk/res/android"这句话一样。

位置可以和系统声明放在一起,一般的声明规则如下:

    

 xmlnsattrs中该控件定义的name="http://schemas.android.com/apk/res/应用包名

其中蓝色文字为自己定义的内容。


然后在自己的控件中使用步奏一定义好的属性:

    <com.example.demo.MyView

        android:id="@+id/MyView"

        attrs中该控件定义的name:自定义属性名=""

        android:layout_height="match_parent"

        android:layout_width="match_parent"

   />




三、在代码中取值

在自定义控件的带AttributeSet参数的构造函数中调用该方法即可:

 private void getFromAttributes(Context context, AttributeSet attrs) {
           //获得属性集的引用
        final TypedArray a = context.obtainStyledAttributes(attrs,
                R.styleable.Animation);
        try {
            if (a != null) {

               //get你设置的属性类型,并把它赋值给你需要赋值的对象.例如这句话就是通过a.getColor()方法获取到在布局文件中赋的值。然后将该颜色值设置给画笔。
               //注意:a.getColor()方法的第二个参数是当布局文件中没有赋值时的默认值。

                mPaint.setColor(a.getColor(R.styleable.Animation_circle,
                        0xffffffff));
                mPaint.setStrokeWidth(a.getDimension(R.styleable.Animation_width, 1));
            }
        } finally {
            if (a != null) {
                a.recycle();
            }
        }
    }


 



然后就大功告成了!



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值