可以监听 editText 各种状态的 editTextView

public class TextContextMenuItemEditText extends android.support.v7.widget.AppCompatEditText {

    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;

    private onTextContextMenuItemListener onTextContextMenuItemListener;

    public TextContextMenuItemEditText(Context context) {
        super(context);
    }

    public TextContextMenuItemEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public TextContextMenuItemEditText(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    public boolean onTextContextMenuItem(int id) {
        switch (id) {
            case ID_SELECT_ALL:
                if (null != onTextContextMenuItemListener) {
                    if (onTextContextMenuItemListener.selectAll()) {
                        return true;
                    }
                }
            case ID_UNDO:
                if (null != onTextContextMenuItemListener) {
                    if (onTextContextMenuItemListener.undo()) {
                        return true;
                    }
                }
            case ID_REDO:
                if (null != onTextContextMenuItemListener) {
                    if (onTextContextMenuItemListener.redo()) {
                        return true;
                    }
                }
            case ID_PASTE:
                if (null != onTextContextMenuItemListener) {
                    ClipboardManager cm = (ClipboardManager) getContext().getSystemService(Context.CLIPBOARD_SERVICE);
                    if (null != cm && cm.hasPrimaryClip()) {
                        //一般取出剪贴板里的第一条内容
                        CharSequence content = cm.getPrimaryClip().getItemAt(0).coerceToText(getContext());
                        if (onTextContextMenuItemListener.paste(content.toString())) {
                            return true;
                        }
                    }
                }
            case ID_PASTE_AS_PLAIN_TEXT:
                if (null != onTextContextMenuItemListener) {
                    if (onTextContextMenuItemListener.pasteAsPlainText()) {
                        return true;
                    }
                }
            case ID_CUT:
                if (null != onTextContextMenuItemListener) {
                    if (onTextContextMenuItemListener.cut()) {
                        return true;
                    }
                }
            case ID_COPY:
                if (null != onTextContextMenuItemListener) {
                    if (onTextContextMenuItemListener.copy()) {
                        return true;
                    }
                }
            case ID_REPLACE:
                if (null != onTextContextMenuItemListener) {
                    if (onTextContextMenuItemListener.replaceText()) {
                        return true;
                    }
                }
            case ID_SHARE:
                if (null != onTextContextMenuItemListener) {
                    if (onTextContextMenuItemListener.shareText()) {
                        return true;
                    }
                }
        }
        return super.onTextContextMenuItem(id);
    }

    public void setOnTextContextMenuItemListener(TextContextMenuItemEditText.onTextContextMenuItemListener onTextContextMenuItemListener) {
        this.onTextContextMenuItemListener = onTextContextMenuItemListener;
    }

    public abstract static class onTextContextMenuItemListener {

        public boolean selectAll() {
            return false;
        }

        public boolean undo() {
            return false;
        }

        public boolean redo() {
            return false;
        }

        public boolean cut() {
            return false;
        }

        public boolean copy() {
            return false;
        }

        public boolean paste(String content) {
            return false;
        }

        public boolean shareText() {
            return false;
        }

        public boolean pasteAsPlainText() {
            return false;
        }

        public boolean replaceText() {
            return false;
        }
    }

}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值