Android: Wie kann der Zeichenindex der Position eines Berührungsereignisses in TextView ermittelt werden?

7

Ich habe ein TextView mit einem OnTouchListener . Was ich will, ist der Zeichenindex, auf den der Benutzer verweist, wenn ich MotionEvent erhalte. Gibt es eine Möglichkeit, zu den zugrunde liegenden Schriftmetriken von TextView zu gelangen?

    
Epaga 20.02.2010, 16:44
quelle

3 Antworten

5

Ich kenne keinen einfachen direkten Weg, um dies zu tun, aber Sie sollten in der Lage sein, etwas zusammenzustellen, indem Sie Paint Objekt des TextView über einen Aufruf an TextView.getPaint ()

Sobald Sie das Paint-Objekt haben, haben Sie Zugriff auf die zugrundeliegenden FontMetrices über einen Aufruf von Paint.getFontMetrics () und haben Zugriff auf andere Funktionen wie Paint.measureText () Paint.getTextBounds () und Paint.getTextWidths () um auf die tatsächliche Größe des angezeigten Textes zuzugreifen.

    
snctln 20.02.2010, 17:04
quelle
23

Haben Sie so etwas versucht:

%Vor%

Hoffe, das hilft ...

    
Tony Blues 28.04.2011 10:13
quelle
0

Obwohl es im Allgemeinen funktioniert, hatte ich ein paar Probleme mit der Antwort von Tony Blues.

Erstens getOffsetForHorizontal gibt einen Offset zurück, selbst wenn das x Die Koordinate liegt weit über dem letzten Zeichen der Zeile.

Zweitens gehört der zurückgegebene Zeichenversatz manchmal zum nächsten Zeichen, nicht zum Zeichen direkt unter dem Zeiger. Anscheinend gibt die Methode den Offset der nächsten Cursorposition zurück. Je nachdem, was näher ist, kann sich das links oder rechts davon befinden.

Meine Lösung verwendet stattdessen getPrimaryHorizontal , um die Cursorposition von a zu bestimmen bestimmter Offset und verwendet binäre Suche, um den Versatz unterhalb der X-Koordinate des Zeigers zu finden.

%Vor%     
devconsole 06.04.2018 12:05
quelle