public class XEditText extends EditText { private OnDelKeyEventListener delKeyEventListener; public XEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public XEditText(Context context, AttributeSet attrs) { super(context, attrs); } public XEditText(Context context) { super(context); } /** * 解决部分机型不支持监听delete键 */ @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { return new XInputConnection(super.onCreateInputConnection(outAttrs), true); } private class XInputConnection extends InputConnectionWrapper { public XInputConnection(InputConnection target, boolean mutable) { super(target, mutable); } @Override public boolean sendKeyEvent(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_DEL) { if (delKeyEventListener != null) { delKeyEventListener.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); } } /** * EditText 删除回调 */ public void setDelKeyEventListener(OnDelKeyEventListener delKeyEventListener) { this.delKeyEventListener = delKeyEventListener; } public interface OnDelKeyEventListener { void onDeleteClick(); } }
转载于:https://my.oschina.net/u/2358780/blog/1479847