android: Wie man eine Textposition vom Berührungsereignis erhält

8

Ich möchte ein benutzerdefiniertes Text-Interface implementieren, bei dem Text durch Berühren und Ziehen ausgewählt wird und die Tastatur nicht angehoben wird, im Gegensatz zu dem Standardverhalten eines langen Klicks, der das CCP-Menü und die Tastatur hervorbringt. Mein Verständnis deutet darauf hin, dass ich diesen Ansatz brauche:

%Vor%

Ich habe alles über getSelectStart () und verschiedene Methoden zum Festlegen eines Bereichs usw. herausgefunden, aber ich kann nicht herausfinden, wie die Textposition basierend auf einem Berührungsereignis getX () und getY () erhalten wird. Gibt es eine Möglichkeit, dies zu tun? Ich habe das Verhalten, das ich möchte, in anderen Office-Apps gesehen.

Wie würde ich außerdem die Tastatur anhalten, bis sie manuell angefordert wird?

    
Tickled Pink 21.04.2012, 21:59
quelle

4 Antworten

12
___ qstnhdr ___ android: Wie man eine Textposition vom Berührungsereignis erhält ___ answer16183510 ___

Danke Waine Kail für die Freigabe des Startcodes, aber es hat nur die "x" Achse des Ereignisses behandelt. Für multiline EditText müssen Sie auch:

1- Berechnen Sie die vertikale Position (y):
2- Holen Sie sich den Zeilenversatz um die vertikale Position
3- Ermitteln Sie den Text-Offset mit der horizontalen und der horizontalen Position

%Vor%     
___ qstntxt ___

Ich möchte ein benutzerdefiniertes Text-Interface implementieren, bei dem Text durch Berühren und Ziehen ausgewählt wird und die Tastatur nicht angehoben wird, im Gegensatz zu dem Standardverhalten eines langen Klicks, der das CCP-Menü und die Tastatur hervorbringt. Mein Verständnis deutet darauf hin, dass ich diesen Ansatz brauche:

%Vor%

Ich habe alles über getSelectStart () und verschiedene Methoden zum Festlegen eines Bereichs usw. herausgefunden, aber ich kann nicht herausfinden, wie die Textposition basierend auf einem Berührungsereignis getX () und getY () erhalten wird. Gibt es eine Möglichkeit, dies zu tun? Ich habe das Verhalten, das ich möchte, in anderen Office-Apps gesehen.

Wie würde ich außerdem die Tastatur anhalten, bis sie manuell angefordert wird?

    
___ tag123android ___ Android ist das mobile Betriebssystem von Google, das zum Programmieren oder Entwickeln von digitalen Geräten (Smartphones, Tablets, Automobile, Fernseher, Wear, Glass, IoT) verwendet wird. Verwenden Sie für Themen rund um Android Android-spezifische Tags wie android-intent, nicht intent, android-activity, nicht activity, android-adapter, nicht adapter usw. Bei anderen Fragen als der Entwicklung oder Programmierung, aber im Zusammenhang mit Android Framework, verwenden Sie Der Link: https://android.stackexchange.com. ___ tag123androidedittext ___ Der EditText ist das Standard-Texteingabe-Widget in Android-Apps. Wenn der Benutzer Text in eine App eingeben muss, ist dies die primäre Möglichkeit für sie. ___ answer18919326 ___

Für meine Anwendung musste ich die Position in einem Touch-Listener ermitteln, aber die obige Lösung scheint keinen genauen Ort anzugeben. Für mich war es meistens 1-2 Zeichen relativ zum Textcursor. Der folgende Code löst das. Der Schlüssel, um dies zu erreichen, ist die Verwendung von post (), um den Code zu verschieben, bis die Cursorposition aktualisiert wurde. Somit ist die Position, die ich bekomme, mit der von EditText garantiert, und der Code ist auch einfacher.

%Vor%     
___ tag123selection ___ Die Auswahl kann sich auf hervorgehobenen Text beziehen, oder sie kann sich auf eine Wahl beziehen, die in UI-Elementen getroffen wurde, die eines erfordern, z. eine bestimmte Option in einem HTML-Menü "Auswählen". Die Selektion ist auch die Stufe eines genetischen Algorithmus, in dem einzelne Genome aus einer Population für die spätere Züchtung ausgewählt werden. ___ answer32496833 ___

Ich stehe auch vor dem gleichen Problem. Und wenn ich versuchte, "int offset = layout.getOffsetForHorizontal (0, x)" zu verwenden, wie Wayne Kail sagte, bekam auch NPE in dieser Zeile. Also habe ich es versucht und am Ende so geschrieben:

%Vor%     
___
Wayne Kail 06.01.2013, 18:09
quelle
10

Danke Waine Kail für die Freigabe des Startcodes, aber es hat nur die "x" Achse des Ereignisses behandelt. Für multiline EditText müssen Sie auch:

1- Berechnen Sie die vertikale Position (y):
2- Holen Sie sich den Zeilenversatz um die vertikale Position
3- Ermitteln Sie den Text-Offset mit der horizontalen und der horizontalen Position

%Vor%     
Sergio Abreu 24.04.2013 04:44
quelle
4

Ich stehe auch vor dem gleichen Problem. Und wenn ich versuchte, "int offset = layout.getOffsetForHorizontal (0, x)" zu verwenden, wie Wayne Kail sagte, bekam auch NPE in dieser Zeile. Also habe ich es versucht und am Ende so geschrieben:

%Vor%     
Ethan Zhong 10.09.2015 08:30
quelle
2

Für meine Anwendung musste ich die Position in einem Touch-Listener ermitteln, aber die obige Lösung scheint keinen genauen Ort anzugeben. Für mich war es meistens 1-2 Zeichen relativ zum Textcursor. Der folgende Code löst das. Der Schlüssel, um dies zu erreichen, ist die Verwendung von post (), um den Code zu verschieben, bis die Cursorposition aktualisiert wurde. Somit ist die Position, die ich bekomme, mit der von EditText garantiert, und der Code ist auch einfacher.

%Vor%     
mahogny 20.09.2013 14:32
quelle