Как отключить опцию вставки в Android EditText
У меня есть требование, где EditText
не позволяет вставлять, но должно разрешать копирование. Я старался setCustomSelectionActionModeCallback
но это отключить опцию копирования.
EditText etxt = (EditText) findViewById(R.id.editText1);
etxt.setCustomSelectionActionModeCallback(new Callback() {
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
public void onDestroyActionMode(ActionMode mode) {
}
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return false;
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
});
3 ответа
Я сделал сам... кредит идет на Android перехватить вставить \ копировать \ вырезать на editText
Я только что изменил onTextContextMenuItem() на основе моего требования..
@Override
public boolean onTextContextMenuItem(int id) {
// Do your thing:
//boolean consumed = super.onTextContextMenuItem(id); // Change1
// React:
switch (id){
case android.R.id.cut:
onTextCut();
break;
case android.R.id.paste:
onTextPaste();
return false; //Change2
//break;
case android.R.id.copy:
onTextCopy();
}
return true; // Change3
}
Если вы используете API уровня 11 или выше, используйте этот
edittext.setCustomSelectionActionModeCallback(new Callback() {
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
return false;
}
public void onDestroyActionMode(ActionMode mode) {
}
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return false;
}
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
});
Если вы хотите отключить только параметр вставки, я думаю, что лучше удалить paste context menu
item, это метод util, который я реализовал в своих приложениях для достижения этого (я также удалил вырезанный элемент)
public static void toggleContextMenuType(EditText editText) {
if (editText.getCustomSelectionActionModeCallback() == null) {
editText.setCustomSelectionActionModeCallback(new ActionMode.Callback() {
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
return true;
}
@Override
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
menu.removeItem(16908322);
menu.removeItem(16908320);
return true;
}
@Override
public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
return false;
}
@Override
public void onDestroyActionMode(ActionMode mode) {
}
});
}else{
editText.setCustomSelectionActionModeCallback(null);
}
}