android edittext监听拦截,EditText输入内容拦截和监听删除

/**

* 扩展输入框。

* 可拦截:

* 软件盘删除按钮点击事件;

* 输入框内容提交;

* 长按文字菜单选项点击事件(复制、粘贴、全选等)

*/

public class ExtendEditText extends AppCompatEditText {

public ExtendEditText(Context context) {

super(context);

}

public ExtendEditText(Context context, AttributeSet attrs) {

super(context, attrs);

}

public ExtendEditText(Context context, AttributeSet attrs, int defStyleAttr) {

super(context, attrs, defStyleAttr);

}

/**

* 监听长按后选项菜单

* @param id

* static final int ID_SELECT_ALL = android.R.id.selectAll;

* static final int ID_UNDO = android.R.id.undo;

* static final int ID_REDO = android.R.id.redo;

* static final int ID_CUT = android.R.id.cut;

* static final int ID_COPY = android.R.id.copy;

* static final int ID_PASTE = android.R.id.paste;

* static final int ID_SHARE = android.R.id.shareText;

* static final int ID_PASTE_AS_PLAIN_TEXT = android.R.id.pasteAsPlainText;

* static final int ID_REPLACE = android.R.id.replaceText;

* static final int ID_ASSIST = android.R.id.textAssist;

* static final int ID_AUTOFILL = android.R.id.autofill;

* @return

*/

@Override

public boolean onTextContextMenuItem(int id) {

boolean handled = false;

if (mOnTextMenuItemClickListener != null) {

handled = mOnTextMenuItemClickListener.onTextMenuItemClick(id);

}

return handled || super.onTextContextMenuItem(id);

}

private OnTextMenuItemClickListener mOnTextMenuItemClickListener;

/**

* 设置文字菜单选项点击监听,用于监听粘贴、全选、复制等操作,可以重写这些操作逻辑。

*/

public void setOnTextMenuItemClickListener(OnTextMenuItemClickListener onTextMenuItemClickListener) {

mOnTextMenuItemClickListener = onTextMenuItemClickListener;

}

/**

* 文字菜单选项点击监听

*/

public interface OnTextMenuItemClickListener {

boolean onTextMenuItemClick(int id);

}

/**

* 输入法

*

* @param outAttrs

* @return

*/

@Override

public InputConnection onCreateInputConnection(EditorInfo outAttrs) {

return new MyInputConnection(super.onCreateInputConnection(outAttrs), false);

}

private int count;

class MyInputConnection extends InputConnectionWrapper implements

InputConnection {

public MyInputConnection(InputConnection target, boolean mutable) {

super(target, mutable);

}

/**

* 对输入的内容进行拦截

*

* @param text

* @param newCursorPosition

* @return

*/

@Override

public boolean commitText(CharSequence text, int newCursorPosition) {

if (mOnCommitTextListener != null) {

if (!mOnCommitTextListener.onCommitText(text, newCursorPosition)) {

return false;

}

}

// // 只能输入汉字

// if (!text.toString().matches("[\u4e00-\u9fa5]+") && !text.toString().matches("[a-zA-Z]+") && !text.toString().matches("[0-9]")) {

// ToastUtil.ToastShow(getContext(), "只能输入数字和字母和汉字");

// return false;

// }

//

//

// tips(text.toString());

//

// if (count > 16) {

// ToastUtil.ToastShow(getContext(), "最多16个字符");

// return false;

// }

return super.commitText(text, newCursorPosition);

}

private void tips(String append) {

count = 0;

String text = getText().toString();

for (int i = 0; i < text.length(); i++) {

String a = String.valueOf(text.charAt(i));

if (a.matches("[\u4e00-\u9fa5]+")) {

count = count + 2;

} else {

count = count + 1;

}

}

for (int i = 0; i < append.length(); i++) {

String a = String.valueOf(append.charAt(i));

if (a.matches("[\u4e00-\u9fa5]+")) {

count = count + 2;

} else {

count = count + 1;

}

}

}

@Override

public boolean sendKeyEvent(KeyEvent event) {

if (event.getAction() == KeyEvent.ACTION_DOWN

&& event.getKeyCode() == KeyEvent.KEYCODE_DEL) {

if (mOnCommitTextListener != null) {

if (mOnCommitTextListener.onDeleteClick()) { // 软键盘删除按钮点击事件拦截。

return true;

}

}

}

return super.sendKeyEvent(event);

}

@Override

public boolean deleteSurroundingText(int beforeLength, int afterLength) {

if (beforeLength == 1 && afterLength == 0) {

return sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,

KeyEvent.KEYCODE_DEL))

&& sendKeyEvent(new KeyEvent(KeyEvent.ACTION_UP,

KeyEvent.KEYCODE_DEL));

}

return super.deleteSurroundingText(beforeLength, afterLength);

}

}

private OnCommitTextListener mOnCommitTextListener;

public void setOnCommitTextListener(OnCommitTextListener onCommitTextListener) {

mOnCommitTextListener = onCommitTextListener;

}

public interface OnCommitTextListener {

/**

* 输入文字监听回调。可以对输入文字进行拦截,处理后再显示(比如去掉特殊字符)。

* @param text

* @param newCursorPosition

* @return

*/

boolean onCommitText(CharSequence text, int newCursorPosition);

/**

* 当软键盘删除按钮点击时的回调方法。

* @return true,拦截;false,默认

*/

boolean onDeleteClick();

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值