Android高手之路之Android中的自定义属性attr.xml、TypedArray的使用
一般我们都是使用android:xxx=""...这样的android的属性。但有时我们需要使用自定义的属性,尤其是自定义view的时候尤其需要。
一般需要以下几个步骤:
1.在res/values 文件下定义一个attrs.xml 文件:
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="MyView"> <attr name="textColor" format="color" /> <attr name="textSize" format="dimension" /> </declare-styleable> </resources>
2.重写我们的自定义View的构造方法。是使用R.styleable.MyView获得我们的自定义属性。
TypedArray 通常最后调用 .recycle() 方法,为了保持以后使用该属性一致性!
package com.example.viewdemo; import android.annotation.SuppressLint; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Paint.Style; import android.graphics.Rect; import android.util.AttributeSet; import android.view.View; public class MyView extends View{ private Paint mPaint; private Context mContext; private static final String mString = "oh,God!"; public MyView(Context context) { super(context); } public MyView(Context context,AttributeSet attrs) { super(context,attrs); mPaint = new Paint(); TypedArray a = context.obtainStyledAttributes(attrs,R.styleable.MyView); int textColor = a.getColor(R.styleable.MyView_textColor, 0xffffff);//注意加默认值 float textSize = a.getDimension(R.styleable.MyView_textSize, 36); mPaint.setTextSize(textSize); mPaint.setColor(textColor); a.recycle(); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); //设置填充 mPaint.setStyle(Style.FILL); //画一个矩形,前俩个是矩形左上角坐标,后面俩个是右下角坐标 canvas.drawRect(new Rect(10, 10, 100, 100), mPaint); mPaint.setColor(Color.BLUE); //绘制文字 canvas.drawText(mString, 10, 110, mPaint); } }
3.将我们的自定义属性用在XML布局文件中。注意前缀
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:test="http://schemas.android.com/apk/res/com.example.viewdemo" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <com.example.viewdemo.MyView android:layout_width="match_parent" android:layout_height="wrap_content" test:textSize="40px" test:textColor="#fff" /> </LinearLayout>
运行效果:
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。