Obtener texto seleccionado de TextView
Estoy tratando de obtener el texto que el usuario seleccionó en un TextView, i wan't para usar el android:textIsSelectable="true"
para permitir que mi usuario copiar / pegar acciones
Sin embargo, no tengo ni idea de cómo obtener el texto una vez que se muestra el menú de barras de acción, el objetivo es implementar un comportamiento de Google book like: selecciona una palabra y te da una definición.
- End TextView con 3 puntos con el uso de maxLength
- Tener una vista en torno a otra vista
- El fondo de TextView se está estirando
- Valor entero en TextView
- Html.fromHtml () está obsoleto, ¿cuál es la alternativa?
- Tamaño de texto de Android por programa demasiado grande
- Android y & nbsp; En TextView
- Alineación de ImageSpan en TextView
- Android - Configuración de TextView a negrita no funciona
- Cómo configurar mulitple clic evento para la única textview?
- Android: ellipsize end - Caracteres adicionales después de la elipse
- Spannable Vs Tipo Vs Html
- Cómo cambiar el estilo de un TextView en tiempo de ejecución
Creo que lo que buscas es TextView.setCustomSelectionActionModeCallback
. Esto le permitirá crear su propio ActionMode.Callback
para cuando se seleccione el texto. A continuación, puede utilizar TextView.getSelectionStart
y TextView.getSelectionEnd
para recuperar el texto seleccionado cuando se selecciona MenuItem
. He aquí un ejemplo rápido:
mTextView.setCustomSelectionActionModeCallback(new Callback() { @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { // Remove the "select all" option menu.removeItem(android.R.id.selectAll); // Remove the "cut" option menu.removeItem(android.R.id.cut); // Remove the "copy all" option menu.removeItem(android.R.id.copy); return true; } @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // Called when action mode is first created. The menu supplied // will be used to generate action buttons for the action mode // Here is an example MenuItem menu.add(0, DEFINITION, 0, "Definition").setIcon(R.drawable.ic_action_book); return true; } @Override public void onDestroyActionMode(ActionMode mode) { // Called when an action mode is about to be exited and // destroyed } @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case DEFINITION: int min = 0; int max = mTextView.getText().length(); if (mTextView.isFocused()) { final int selStart = mTextView.getSelectionStart(); final int selEnd = mTextView.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 = mTextView.getText().subSequence(min, max); // Finish and close the ActionMode mode.finish(); return true; default: break; } return false; } });
Resultados