Android- ¿Cómo puedo mostrar la selección de texto en la vista de texto?

Estoy implementando una aplicación de lectura de epub donde estoy usando textview para mostrar texto de epub. Quiero seleccionar texto de la vista de texto cuando el usuario presiona sobre la vista de texto y luego realiza varias operaciones en el texto seleccionado de la vista de texto como resaltar, etc. Entonces, ¿cómo puedo mostrar esos cursores al usuario para seleccionar el texto que quiera el usuario?

* No quiero usar EditText y hacer que se vea como textview. Puede ser que prevalezca la vista textual.

* He adjuntado una captura de pantalla para explicar lo que estoy buscando-

Captura de pantalla de moon + reader para mostrar la selección de texto que quiero en mi aplicación

Esto se preguntó hace mucho tiempo, cuando también tuve este problema yo mismo. Hice una TextView seleccionable para mi propia aplicación Jade Reader. He alojado la solución en GitHub. (El código en BitBucket se vincula a la aplicación, pero es más completo y pulido).

TextView seleccionable (en GitHub)

Jade Reader (en BitBucket)

selección

El uso del siguiente código hará que su TextView sea seleccionable.

package com.zyz.mobile.example; import android.app.Activity; import android.os.Bundle; import android.view.MotionEvent; import android.view.View; public class MainActivity extends Activity { private SelectableTextView mTextView; private int mTouchX; private int mTouchY; private final static int DEFAULT_SELECTION_LEN = 5; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // make sure the TextView's BufferType is Spannable, see the main.xml mTextView = (SelectableTextView) findViewById(R.id.main_text); mTextView.setDefaultSelectionColor(0x40FF00FF); mTextView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { showSelectionCursors(mTouchX, mTouchY); return true; } }); mTextView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mTextView.hideCursor(); } }); mTextView.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { mTouchX = (int) event.getX(); mTouchY = (int) event.getY(); return false; } }); } private void showSelectionCursors(int x, int y) { int start = mTextView.getPreciseOffset(x, y); if (start > -1) { int end = start + DEFAULT_SELECTION_LEN; if (end >= mTextView.getText().length()) { end = mTextView.getText().length() - 1; } mTextView.showSelectionControls(start, end); } } } 

Depende de la versión mínima de Android que le gustaría admitir.

En 3.0+, tiene el atributo textIsSelectable en TextView, que habilita este comportamiento. P.ej:

  

Debajo de eso, lo mejor es usar un EditText que se ve y se comporta como un TextView (aparte de lo de las elecciones). O puede implementar esta característica usted mismo usando tramos.