Вы должны создать собственный EditText, который может перехватить событие вставки. Для этого нужно будет переопределить onTextContextMenuItem(int id)
Что-то подобное достаточно:
public class MyEditText extends EditText {
UpdateListener listener;
public MyEditText(Context context) {
super(context);
}
public MyEditText(Context context, AttributeSet attrs) {
super(context, attrs);
}
public MyEditText(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public MyEditText(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public void setUpdateListener(UpdateListener listener){
this.listener = listener;
}
@Override
public boolean onTextContextMenuItem(int id) {
boolean consumed = super.onTextContextMenuItem(id);
switch (id){
case android.R.id.cut :
if(listener != null) listener.onCut();
break;
case android.R.id.copy :
if(listener != null) listener.onCopy();
break;
case android.R.id.paste :
if(listener != null) listener.onPaste();
}
return consumed;
}
interface UpdateListener{
void onCut();
void onCopy();
void onPaste();
}
}
Затем в действии вы должны реализовать интерфейс, заданный этим пользовательским EditText
editText = findViewById(R.id.textview2);
editText.setUpdateListener(new MyEditText.UpdateListener() {
@Override
public void onCut() {
Log.i(TAG, "onCut: ");
}
@Override
public void onCopy() {
Log.i(TAG, "onCopy: ");
}
@Override
public void onPaste() {
Log.i(TAG, "onPaste: ");
// triggered when code is pasted
}
});
Если я хорошо понимаю, вы хотите, чтобы когда пользователь вставлял что-то, он стирал написанное и вставлял текст.
В onPaste()
:
@Override
public void onPaste() {
Log.i(TAG, "onPaste: ");
ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);
String pasteData = "";
//check if something present in clipboard, and check if it is text
if (clipboard.hasPrimaryClip() && clipboard.getPrimaryClipDescription().hasMimeType(MIMETYPE_TEXT_PLAIN)) {
ClipData.Item item = clipboard.getPrimaryClip().getItemAt(0);
pasteData = item.getText().toString();
editText.setText(pasteData);
}
}