(一)自定义之---自定义属性

一,简单介绍

1,为什么使用自定义属性?

          所有的控件都是继承自view这个类的,所以view类所拥有的属性我们继承它的子类是全部都拥有的,但并不是每个控件都能使用所有属性.

      比如LinearLayout中能使用layout_weight属性,而RelativeLayout却不能使用,因为layout_weight是为LinearLayout的LayoutParams定义的。

        所以,我们要自定义属性,添加自己想要的属性

二,基本使用,

1,在res-values文件夹下新建attrs.xml文件

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!--declare-styleable: 表示一个属性组。它的name必须和你自定义view的名字相同-->
    <declare-styleable name="CustomeCircle">
        <!--attr:表示单独的一个属性。format代表属性的格式-->
        <attr name="circle_color" format="color"></attr>
    </declare-styleable>
</resources>

 

2,新建一个自定义类,通过obtainStyledAttributes设置属性值,但记得recycle(),用完回收,

public class CustomeCircle extends View {

    private Paint mPaint = new Paint();


    public CustomeCircle(Context context) {
        this(context,null);
    }


    public CustomeCircle(Context context,  AttributeSet attrs) {
        this(context,attrs,0);
    }

    public CustomeCircle(Context context,  AttributeSet attrs, int defStyleAttr ) {
        super(context, attrs, defStyleAttr);
        TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.CustomeCircle);
        int color = typedArray.getColor(R.styleable.CustomeCircle_circle_color, Color.RED);
        typedArray.recycle();
        mPaint.setColor(color);
    }

 

3,也可以在layout.xml布局中使用该属性

<laobi.com.customecircledemo.CustomeCircle
    android:visibility="visible"
    android:layout_margin="10dp"
    android:padding="10dp"
    android:layout_width="wrap_content"
    app:circle_color="#00ffff"
    android:layout_height="100dp"
    android:background="#000"/>

三,相关属性:

(一)属性值的类型(format)有如下几种:

         1,boolean 表示attr取值为true或者false

         2,color 表示attr取值是颜色类型,例如#ff3344,或者是一个指向color的资源id,例如R.color.colorAccent.

       3,dimension 表示 attr 取值是尺寸类型,例如例如取值16sp、16dp,也可以是一个指向dimen的资源id,例如R.dimen.dp_16

        4,float 表示attr取值是整形或者浮点型

        5,fraction 表示 attr取值是百分数类型,只能以%结尾,例如30%

        6,integer 表示attr取值是整型

        7,string 表示attr取值是String类型,或者一个指向String的资源id,例如R.string.testString

        8,reference 表示attr取值只能是一个指向资源的id。

        9,enum 表示attr取值只能是枚举类型。

        10,flag 表示attr取值是flag类型。

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页