上周评审测试案例是,测试,产品要求输入框不可粘贴重别处复制的内容。
各种度娘后,看到基本都是如下解决方案:
- editText.setLongClickable(false); //设置该属性
//以及设置该CallBack
- editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
- @Override
- public boolean onCreateActionMode(ActionMode actionMode, Menu menu) {
- return false;
- }
- @Override
- public boolean onPrepareActionMode(ActionMode actionMode, Menu menu) {
- return false;
- }
- @Override
- public boolean onActionItemClicked(ActionMode actionMode, MenuItem menuItem) {
- return false;
- }
- @Override
- public void onDestroyActionMode(ActionMode actionMode) {
- }
- });
然并卵,测试几部手机都无效。
最后尝试了修改粘贴板中的内容,测试过三部手机是OK的。(华为P7; 红米note4; Vivo.Y51)
代码如下(自定义类继承EditText,重写该方法);
public class NoPasteEditText extends EditText { public NoPasteEditText(Context context) { super(context); init(context); } public NoPasteEditText(Context context, AttributeSet attrs) { super(context, attrs); init(context); } public NoPasteEditText(Context context,
AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context); }
//为了保险起见,把别人的方法也加上,不过好像基本也没起作用 private void init(final Context context) { setLongClickable(false); setCustomSelectionActionModeCallback(new ActionMode.Callback() { @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return false; } @Override public void onDestroyActionMode(ActionMode mode) { } }); } @Override public boolean onTextContextMenuItem(int id) { DMLog.e("onTextContextMenuItem", "android.R.id.paste = "
+ String.valueOf(android.R.id.paste)); switch (id) { case android.R.id.paste: ClipboardManager clip = (ClipboardManager) getContext()
.getSystemService(Context.CLIPBOARD_SERVICE); CharSequence paste = clip.getText();//得到粘贴版内容 String content = getText().toString(); setText(""); ClipData clipData = ClipData.newPlainText("key",
content);//第一个参数key好像是可以随便写的 clip.setPrimaryClip(clipData); break; } return super.onTextContextMenuItem(id); } }