前言
自定义控件经常需要一些特殊的配置,添加一些自定义属性 。
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="" 。引用自定义属性时,使用命名空间+属性名的方式 。
文章插图
效果如下
2. 不同控件使用同一属性
不同控件使用相同的自定义属性名时,两者会有冲突,需要将属性名提取到外面进行声明 。
3. 使用系统属性
attrs.xml文件,我们需要在中需要设置字符,同时设置字符的颜色和字体大小 。
【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);}}}
- 自定义vue组件--实现多图片上传
- SVN版本控制软件-图片含义详解
- android反编译工具!开发者必备的顶级Android开发工具,大厂直通车!
- 自定义feign配置与服务调用的安全验证
- Android Design Support Library
- 自定义布局Dialog 自定义dialog右上角带叉号的dialog 点击右上角
- PyQt窗口FramelessWindowHint模式下自定义窗口缩放与移动功能
- 自定义版式 信创办公–基于WPS的PPT最佳实践系列
- roadflow asp.net工作流自定义表单
- Springboot 自定义mybatis 拦截器,实现我们要的扩展