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

xiaoxiao2021-02-28  56

客官请看图

功能简介

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

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

转载请注明原文地址: https://www.6miu.com/read-36368.html

最新回复(0)