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?
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
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?
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%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%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
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%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%Tags und Links android selection android-edittext