Así que terminé resolviendo esto a través del enlace en el comentario de James Moore here. Terminé usando la solución de Tony Blues en ese enlace. Esa solución es la siguiente:
1.) Establezca un onTouchListener en TextView.
2.) Obtenga el diseño de TextView.
3.) Obtenga las coordenadas x, y del toque mediante el evento.
4.) Encuentre la línea y el desplazamiento (índice) en función de ese evento.
El ejemplo de código es la forma en que uno log (en modo prolijo) el índice de un toque dado un TextView llamado manip:
manip.setOnTouchListener(new View.OnTouchListener() {
public boolean onTouch(View v, MotionEvent event) {
Layout layout = ((TextView) v).getLayout();
int x = (int)event.getX();
int y = (int)event.getY();
if (layout!=null){
int line = layout.getLineForVertical(y);
int offset = layout.getOffsetForHorizontal(line, x);
Log.v("index", ""+offset);
}
return true;
}
});
EDIT: Rahul Mandaliya ha traído a mi atención que este código fallará si hay relleno en la vista de texto. Desafortunadamente, ha pasado mucho tiempo desde que escribí el código de Android, por lo que no estoy seguro de cómo actualizar esta respuesta para dar cuenta de eso. Intuitivamente, parece que podrías hacer algún tipo de verificación contra el evento de clic si conoces el valor de relleno. Perdón por no poder ser más útil en este caso extremo. :-(
Parece que estás pidiendo http://stackoverflow.com/questions/2302867/android-how- to-determined-character-index-of-a-touch-events-position-in-textview –