¿Hay alguna manera de detectar 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. Graciasandroid paste event
7
A
Respuesta
4
Crear menu.xml con la posición de 'pegar'
Registro contextMenu a su EditarTexto
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;
}
5
Debe implementar un escucha TextWatcher en el control que recibe la acción pegar.
El clase TextWatcher proporciona métodos para manejar la 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) {
}
});
}
+2
Solo un comentario pedante: la conversión a un TextView es suficiente. –
0
A continuación se muestra el código donde se puede anular actionbar 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;
}
});
}
}
0
Puede establecer Listener Clase:
public interface GoEditTextListener {
void onUpdate();
}
auto Сreate clase 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 su 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
}
});
Cuestiones relacionadas
- 1. capture paste event/html pegado - Javascript
- 2. Android - event listener
- 3. android connect to internet event
- 4. Button Click Event en Android
- 5. Android Maps get Scroll Event
- 6. android widget on click event
- 7. Cómo conectar un evento PASTE global?
- 8. touchend event no funciona en Android
- 9. onclick blocks copy + paste en Mobile Safari?
- 10. ¿Cómo funciona el magic% paste de IPython?
- 11. ¿Cuál es la diferencia entre button.click event y button.command event?
- 12. Seguridad de primavera: agregar "On successful event event listener"
- 13. jQuery dispatch event? Cómo
- 14. CQRS intent command event
- 15. jQuery textbox change event
- 16. JQuery Datatables ready event?
- 17. javascript event e.which?
- 18. Backbone add event
- 19. On-Session-expire-event?
- 20. jQuery fadeIn event?
- 21. ASP.NET page_init event?
- 22. ASP.Net Event Loop Order
- 23. ListView Item Added Event
- 24. ¿Qué ChoiceBox-Event elegir?
- 25. jQuery iframe load() event?
- 26. javascript event-loop pregunta
- 27. iframe contents change event?
- 28. jQuery Timed Event
- 29. tinyMCE textarea focusout event?
- 30. javascript property change event
Sé que este hilo es viejo, pero no esta reemplazar el menú contextual integrado con su propio menú contextual? ¿Qué pasa si te gusta ese menú, pero solo quieres que te notifiquen cuando ocurre una pegada? –
@ScottBiggs También funciona sin volver a crear el menú. Ver mi respuesta [aquí] (http://stackoverflow.com/a/14981376/717341) –