studio manager getsystemservice from event android events paste

manager - evento de pasta android



on paste event (4)

Crear menu.xml con la posición ''pegar''

Registre contextMenu en su EditText

EditText et=(EditText)findViewById(R.id.et); registerForContextMenu(et);

Crear contextMenu

@Override public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu, menu); AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo; menu.setHeaderTitle("title"); }

Crear menú de método onClick

@Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo)item.getMenuInfo(); switch (item.getItemId()) { case R.id.paste: break; } return true; }

¿Hay alguna manera de atrapar el evento de pegar en mi aplicación? Debo hacer algo cuando hago clic largo en un texto de edición y selecciono Pegar en el menú contextual. Gracias


A continuación se muestra un código donde puede anular la barra de acciones copiar / Pegar, etc.

public class MainActivity extends Activity { EditText editText; private ClipboardManager myClipboard; private ClipData myClip; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); editText = (EditText) findViewById(R.id.editText3); myClipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); editText = (EditText) findViewById(R.id.editText3); editText.setCustomSelectionActionModeCallback(new Callback() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // TODO Auto-generated method stub return false; } @Override public void onDestroyActionMode(ActionMode mode) { // TODO Auto-generated method stub } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // TODO Auto-generated method stub return true; } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { // TODO Auto-generated method stub switch (item.getItemId()) { case android.R.id.copy: int min = 0; int max = editText.getText().length(); if (editText.isFocused()) { final int selStart = editText.getSelectionStart(); final int selEnd = editText.getSelectionEnd(); min = Math.max(0, Math.min(selStart, selEnd)); max = Math.max(0, Math.max(selStart, selEnd)); } // Perform your definition lookup with the selected text final CharSequence selectedText = editText.getText() .subSequence(min, max); String text = selectedText.toString(); myClip = ClipData.newPlainText("text", text); myClipboard.setPrimaryClip(myClip); Toast.makeText(getApplicationContext(), "Text Copied", Toast.LENGTH_SHORT).show(); // Finish and close the ActionMode mode.finish(); return true; case android.R.id.cut: // add your custom code to get cut functionality according // to your requirement return true; case android.R.id.paste: // add your custom code to get paste functionality according // to your requirement return true; default: break; } return false; } }); } }


Debería implementar un escucha de TextWatcher en el control que recibe la acción pegar.

La clase TextWatcher proporciona métodos para manejar OnChange, BeforeChange y AfterChange de cualquier Editable. Por ejemplo:

private void pasteEventHandler() { ((EditText)findViewById(R.id.txtOutput)) .addTextChangedListener(new TextWatcher() { public void afterTextChanged(Editable s) { Log.d(TAG, "Text changed, refreshing view."); refreshView(); } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { } }); }


Puede configurar la clase de escucha:

public interface GoEditTextListener { void onUpdate();

}

Сreate self class para EditText:

public class GoEditText extends EditText { ArrayList<GoEditTextListener> listeners; public GoEditText(Context context) { super(context); listeners = new ArrayList<>(); } public GoEditText(Context context, AttributeSet attrs) { super(context, attrs); listeners = new ArrayList<>(); } public GoEditText(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); listeners = new ArrayList<>(); } public void addListener(GoEditTextListener listener) { try { listeners.add(listener); } catch (NullPointerException e) { e.printStackTrace(); } } /** * Here you can catch paste, copy and cut events */ @Override public boolean onTextContextMenuItem(int id) { boolean consumed = super.onTextContextMenuItem(id); switch (id){ case android.R.id.cut: onTextCut(); break; case android.R.id.paste: onTextPaste(); break; case android.R.id.copy: onTextCopy(); } return consumed; } public void onTextCut(){ } public void onTextCopy(){ } /** * adding listener for Paste for example */ public void onTextPaste(){ for (GoEditTextListener listener : listeners) { listener.onUpdate(); } } }

xml:

<com.yourname.project.GoEditText android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/editText1"/>

Y en tu actividad:

private GoEditText editText1; editText1 = (GoEditText) findViewById(R.id.editText1); editText1.addListener(new GoEditTextListener() { @Override public void onUpdate() { //here do what you want when text Pasted } });