客官请看图

功能简介
检查文本输入框当前输入的字符串, 进行后台匹配, 如果匹配到了, 就进行提示.
当然, 这个提示并不是简单粗暴的setText, 因为用户的输入可能只是前面的一致而已.后面不一定相同呢.
一旦发现不匹配, 立即取消提示.
原理
1.自定义一个ExEditText 继承 AppCompatEditText
public class ExEditText extends AppCompatEditText {
private String mInputTipText = "18888888888";//用来做匹配用的字符串, 当然要提供一个方法可以配置这个属性的啦
}
2.重写onDraw方法
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);//不要注释此方法哦~~~
if (isFocused()) {//只在有焦点的情况下检测
if (isInputTipPattern()) {
//只处理了竖直居中的情况
canvas.save();
final TextPaint textPaint = getPaint();//因为是继承的TextView, 所以可以直接拿到paint, 就不要自己new了.
textPaint.setColor(Color.GRAY);//颜色随便设.
//只绘制末尾的文本区域
canvas.clipRect(textPaint.measureText(String.valueOf(getText()), 0, getText().length()) + getPaddingLeft(),
0, getMeasuredWidth(), getMeasuredHeight());//重点哦, 要不然会和输入框原本的内容重叠呢;
canvas.drawText(mInputTipText, getPaddingLeft(),
getMeasuredHeight() / 2 - textPaint.descent() / 2 - textPaint.ascent() / 2, textPaint);//绘制提示文本
canvas.restore();
}
}
}
private boolean isCenterVertical() {
return Gravity.CENTER_VERTICAL == (getGravity() & Gravity.CENTER_VERTICAL);
}
private boolean isInputTipPattern() {
String text = getText().toString();
return isCenterVertical() /*必须是Gravity.CENTER_VERTICAL*/ &&
!TextUtils.isEmpty(mInputTipText) /*需要自动匹配的文本不能为空*/ &&
!TextUtils.isEmpty(text) /*当前文本框内容不能为空*/&&
mInputTipText.startsWith(text) &&
!TextUtils.equals(mInputTipText, text) /*匹配的内容如果已经一致了, 就没必要了.*/;
}
3.失去焦点, 自动上屏
可以在这里做拦截, 决定什么时候要上屏, 什么时候不要上屏. 任你发挥.
@Override
protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(focused, direction, previouslyFocusedRect);
if (!focused) {
//没有焦点的时候, 检查自动匹配输入
if (isInputTipPattern()) {
setText(mInputTipText);
}
}
}
联系作者
请使用QQ扫码加群, 小伙伴们在等着你哦!

关注我的公众号, 每天都能一起玩耍哦!

网友评论