2017-07-18 5 views
5
Einstellung

Die Dokumentation für InputConnection.commitText(CharSequence text, int newCursorPosition) sagt, dass newCursorPosition bedeutet:den Cursor am Anfang des eingefügten Text mit InputConnection.commitText

int: Die neue Cursor-Position um den Text, in Java-Zeichen. Wenn> 0, ist dies relativ zum Ende des Textes - 1; Wenn < = 0, ist dies relativ zum Anfang des Textes. Also ein Wert von 1 wird immer den Cursor an die Position nach dem Volltext eingefügt werden. Hinweis das bedeutet, dass Sie den Cursor nicht innerhalb des Textes positionieren können, da der Editor Änderungen an dem von Ihnen bereitgestellten Text vornehmen kann, damit dort nicht korrekt angegeben werden kann.

In this example, wenn ich zwei Zeichen eingeben, dann positionieren Sie den Cursor zwischen ihnen wie dieser

enter image description here

und dann ein anderes Zeichen eingeben, ist es egal, ob ich newCursorPosition-0 gesetzt oder 1. Der Cursor befindet sich immer am Ende der Einfügung. Zum Beispiel

inputConnection.commitText("aaa", 0); 

oder

inputConnection.commitText("aaa", 1); 

Beide Aufruf zeigen den Cursor wie folgt aus:

enter image description here

Wenn ich -1 mit

inputConnection.commitText("aaa", -1); 

Ich erhalte diese

enter image description here

Die 1 und -1 Ergebnisse werden gemäß der Dokumentation zu erwarten. Warum setzt 0 den Cursor nicht an den Anfang der Einfügung? Ich würde erwarten, 0 wie diese

inputConnection.commitText("aaa", 0); 

enter image description here

sein sollte, ist es aber nicht. Warum nicht?

+0

Warum zeigen Sie zwei verschiedene Standorte für 0? Vielleicht hat 0 keine Wirkung? –

+0

Im letzten Bild zeige ich das erwartete Ergebnis, nicht das tatsächliche Ergebnis. @AlexanderHiggins – Suragch

Antwort

3

Das sieht wie ein Fehler im Code aus, aber Sie sind der Richter.

Werfen Sie einen Blick auf replaceText() in BaseInputConnection. Ich glaube, dass dies der Code ist, der den Cursor nach dem Einfügen platziert. (replaceText() aus commitText()) genannt.

In dem referenzierten Code, a ist die Auswahl Start. b ist die Auswahl Ende. Da es keine Auswahl in dem Beispiel und die Cursor am Index 1 dann a == b == 1. Auch die neuen Text (aaa) wird nicht eingefügt (ersetzt eine Auswahl [a, b]), bis der Cursor in die neue Auswahl verschoben wurde.

Selection.setSelection(content, newCursorPosition) die Cursorposition setzt, so dass für 0 und 1 identische Positionierung in Ihrem Beispiel zu erzeugen, würde ich den abgeleiteten Wert von newCursorPosition erwartet, dass das gleiche für beiden Eingänge sein.

Mit dem Cursor zwischen den beiden 8er an Position 1 positioniert, lassen Sie denken, die durch den folgenden Code:

if (newCursorPosition > 0) { 
    newCursorPosition += b - 1; 
} else { 
    newCursorPosition += a; 
} 

Für die Eingabe von 1, newCursorPosition> 0, so newCursorPosition = newCursorPosition + 1 - 1 oder 1 .

Für Ihre Eingabe von 0 ist newCursorPosition nicht = 0, so newCursorPosition = newCursorPosition + a (0 + 1) oder 1.

Da beide Eingänge den gleichen Wert zu produzieren, würde ich Selection.setSelection(content, newCursorPosition) erwarten um die Ergebnisse zu sehen, die Sie sehen.

Ich habe den Code nicht genau zu diesem Ort gefolgt, aber ich glaube, dass dies das Problem ist. Ich habe die Ausführungspfade in BaseInputConnection für newCursorPosition = 0 und newCursorPosition = 1 auf einem Pixel-Emulator mit API 21 verfolgt und was oben ausgeführt wird, gilt.

+0

Das Lesen der Dokumentation, kann ich irgendwie die Bedeutung von "Sie können den Cursor innerhalb des Textes nicht positionieren" verstehen. Wenn "0" für "newCursorPosition" den Cursor an den Anfang der Einfügung bewegen könnte, würde Ihnen das tatsächlich eine gewisse Positionierungskraft geben. Wie Sie gesagt haben, fühlt es sich immer noch wie ein Defekt an, aber vielleicht ist es ein verständlicher. – Suragch

+0

@Suragh Vielleicht sollte die Dokumentation lesen: "Wenn> = 0, ist dies relativ zum Ende des Textes - 1; wenn <0, ist dies relativ zum Anfang des Textes." Ich denke jedoch, dass der Cursor am Anfang der Einfügung stehen kann, aber das muss nicht sehr gefragt sein (ich habe Ihre klärende Erklärung von "a" und "b" eingefügt). – Cheticamp

Verwandte Themen