Android-->输入框自动提示文本, 失去焦点自动输入

客官请看图

input_tip.gif

功能简介

检查文本输入框当前输入的字符串, 进行后台匹配, 如果匹配到了, 就进行提示.
当然, 这个提示并不是简单粗暴的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扫码加群, 小伙伴们在等着你哦!

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

猜你喜欢

转载自blog.csdn.net/angcyo/article/details/72897670
今日推荐