禁止 EditTextView 复制/粘贴功能

376 阅读1分钟

最近在公司项目有个新的需求,需要把 EdittextView的复制/粘贴功能禁止掉,搜索了一圈,都是需要把自定义的 ActionMode.Callback赋给customSelectionActionModeCallback, 但是尝试了一下,好像不是完全能禁止掉,尤其是光标获取焦点后,如果再点击光标,选择框会继续出现,后来发现了customInsertionActionModeCallback,这个是针对与点击光标事件的,所以需要把两个 callback 都需要赋予我们自定义的 ActionMode的callback,所以需要返回的方法都返回false,当然长按事件需要禁止掉。

class CommentEditText @JvmOverloads constructor(
    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = android.R.attr.editTextStyle
) : AppCompatEditText(context, attrs, defStyleAttr) {

    init {
        isLongClickable = false
        setTextIsSelectable(false)

        /**
         * 防止光标点击的时候出现复制/粘贴的选择框
         */
        customInsertionActionModeCallback = DisablePasteCallBack()
        /**
         * 防止双击文本的时候出现复制/粘贴的选择框
         */
        customSelectionActionModeCallback = DisablePasteCallBack()
    }

    inner class DisablePasteCallBack : ActionMode.Callback {
        override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean {
            return false
        }

        override fun onPrepareActionMode(mode: ActionMode?, menu: Menu?): Boolean {
            return false
        }

        override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
            return false
        }

        override fun onDestroyActionMode(mode: ActionMode?) {}
    }
}