最近在公司项目有个新的需求,需要把 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?) {}
}
}