Android自定义密码输入框
项目地址
项目需要用到密码框输入,并且使用自定义的键盘,但是密码框需要区分输入完成、待输入、未输入颜色百度一番没有结果就自己自定义一个了
自定义键盘 (我做的比较简单就不累赘了)
我这里使用的是简单的键盘 需要看源码点击这里
自定义输入框View
1.控件属性定义,自己根据需求罗列一下感觉需要的属性如下
属性名称 | 作用 |
---|---|
textColor | 文字颜色默认黑色 |
textSize | 文文字尺寸默认 22 |
count | 输入框个数默认6 |
width | 输入框宽度默认40dp |
height | 输入框高度默认40dp |
lineColor | 默认状态的边框颜色 默认黑色 |
fillColor | 默认状态的填充颜色 默认白色 |
lineWidth | 默认状态的边框宽度 默认1dp |
focusLColor | 默认状态的边框颜色 默认黑色 |
focusFillColor | 默认状态的填充颜色 默认白色 |
focusLineWidth | 默认状态的边框宽度 默认1dp |
employLColor | 默认状态的边框颜色 默认黑色 |
employFillColor | 默认状态的填充颜色 默认白色 |
employLineWidth | 默认状态的边框宽度 默认1dp |
isContinuous | 输入框是否连续(方便以后其他需要就添加了)默认true 连续 |
borderRadius | 文输入框边角半径 默认0dp |
conceal | 是否隐藏文字 默认false 不隐藏 |
replaceString | 文字隐藏替换字符 默认没有 |
replaceDrawable | 文字隐藏替换图片(优先级高于replaceString) 默认没有 |
circleRadius | 默认替换图案半径(圆形) 默认为width的三分之一 |
circleColor | 默认替换图案颜色 默认与textColor 一致 |
isContinuousRepeatChar | 是否过滤连续重复的字符 默认false 不过滤 |
isContinuousChar | 是否过滤连续的字符 默认false 不过滤 |
isInvokingKeyboard | 是否使用系统键盘 默认为true 如果为false的换需要自己手动调起键盘 |
根据自己的需求并考虑到我们后期的扩展性定义了如上属性,属性定义这个也比较简单就不过多的描述:
2.初始化
首先我们要获取属性
通过:TypedArray typedArray =
context.obtainStyledAttributes(attrs, R.styleable.BorderPWEditText);获取到typedArray 对象,使用typedArray对象我们将会获取到用户设置的属性并可以指定属性默认值
初始化画笔
private void initPaint() {
//文字画笔
paintText = new Paint(Paint.ANTI_ALIAS_FLAG);
paintText.setTextAlign(Paint.Align.CENTER);
paintText.setAntiAlias(true);
paintText.setTextSize(mTextSize);
paintText.setColor(mTextColor);
//边框画笔
borderPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
borderPaint.setStrokeWidth(mLineWidth);
borderPaint.setColor(mLineColor);
borderPaint.setAntiAlias(true);
borderPaint.setStyle(Paint.Style.STROKE);
//填充画笔
fillPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
fillPaint.setColor(mFillColor);
fillPaint.setAntiAlias(true);
fillPaint.setStyle(Paint.Style.FILL);
}
目前定义了三只画笔,可能有人说你不是有默认边框填充,待输入边框填充,未输入边框填充类型吗?但是我们梳理一下你你会发现 默认、待输入、未输入情况下画笔的颜色和宽度不同,起始就只有填充和边框画笔类型所以我们就