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.

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

Ejemplo

  • LineSpacingMultiplier y maxLines cortan la última línea, android textview
  • Valor entero en TextView
  • Fundido de fondo de un android de vista de texto
  • TextView: lineSpacingMultiplier y lineSpacingExtra también se aplica a la última línea
  • Actualizar Android TextView
  • Obtención de la altura de la vista de texto antes de la representación en el diseño
  • ¿Por qué TextView (con un ID) no guarda automáticamente su estado?
  • No puede desplazar el ViewPager al tocar TextView (con android: gravity = "center") en él
  • Obtener el texto visible actual en la vista de texto
  • Configuración de un ancho de TextView en java
  • Android: ClickableSpan en TextView seleccionable
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.