Android 自定义控件属性

前言
自定义控件经常需要一些特殊的配置,添加一些自定义属性 。
1. 自定义属性
attrs.xml文件,所有自定义属性需要在文件中添加-节点来声明,例如定义属性设置背景色 。

自定义控件继承View,使用.es(, int[])方法来解析自定义属性,得到自定义属性的值,调用.()方法释放资源,最后设置背景色 。
public class AttrDeclareView extends View {public AttrDeclareView(Context context) {this(context, null);}public AttrDeclareView(Context context, @Nullable AttributeSet attrs) {this(context, attrs, 0);}public AttrDeclareView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AttrDeclareView);int color = a.getColor(R.styleable.AttrDeclareView_background_color, 0);a.recycle();if (color != 0) {setBackgroundColor(color);}}}
布局文件分别引用不同的背景色值 。添加命名空间xmlns:app="" 。引用自定义属性时,使用命名空间+属性名的方式 。

Android 自定义控件属性

文章插图
效果如下
2. 不同控件使用同一属性
不同控件使用相同的自定义属性名时,两者会有冲突,需要将属性名提取到外面进行声明 。

3. 使用系统属性
attrs.xml文件,我们需要在中需要设置字符,同时设置字符的颜色和字体大小 。
【Android 自定义控件属性】
自定义控件,获取自定义文本数据,并在()方法中调用 。
Android 自定义控件属性

文章插图
public class AttrDeclareView extends View {private String mText;private Paint mPaint;public AttrDeclareView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.AttrDeclareView);int color = a.getColor(R.styleable.AttrDeclareView_background_color, 0);mText = a.getString(R.styleable.AttrDeclareView_android_text);int textSize = a.getDimensionPixelSize(R.styleable.AttrDeclareView_android_textSize, 0);int textColor = a.getColor(R.styleable.AttrDeclareView_android_textColor, 0);a.recycle();if (color != 0) {setBackgroundColor(color);}if (mText != null) {mPaint = new Paint();mPaint.setColor(textColor);mPaint.setTextSize(textSize);}}@Overrideprotected void onDraw(Canvas canvas) {super.onDraw(canvas);if (mText != null) {canvas.drawText(mText, 0, getHeight()/2, mPaint);}}}