2017-07-06 1 views
0

Ich mache eine benutzerdefinierte Tastatur, die ich in eine App aufnehmen möchte. Ich kenne bereits how to make a system keyboard. Ich möchte das nicht tun, weil es vom Benutzer installiert werden muss.Wie bekomme ich einen Verweis auf die InputConnection eines Android EditText?

Immer wenn der Benutzer eine Taste auf der Tastatur drückt, sollte er den Schlüsseltext an die Stelle EditText senden, die augenblicklich den Fokus hat (falls vorhanden).

The documentation states

Ein Editor muss mit dem IME, empfängt Befehle über diese InputConnection Schnittstelle und das Senden von Befehlen über InputMethodManager zu interagieren.

Dies wird in der folgenden Abbildung veranschaulicht (View ist eine EditText).

enter image description here

Dies macht es klingen wie soll ich einen Eingangsanschluss unter Verwendung mit dem EditText zu kommunizieren. Meine Frage ist also, wie bekommt meine benutzerdefinierte Tastaturansicht einen Verweis auf die aktuell fokussierte EditText Eingangsverbindung. Oder wie startet es diese Verbindung?

Verwandte

+0

'View # onCreateInputConnection'? – pskink

+0

Die Dokumente sagen: * "Erstellen Sie eine neue InputConnection für eine InputMethode, um mit der Ansicht zu interagieren. Die Standardimplementierung gibt NULL zurück, da sie Eingabemethoden nicht unterstützt. Sie können dies überschreiben, um diese Unterstützung zu implementieren. Dies ist nur für Sichten erforderlich das nehme Fokus und Texteingabe. "* – pskink

+0

@pskink Oh, ich habe deinen ersten Kommentar zu schnell gelesen. Ich dachte, es wäre so etwas wie 'getInputConnection'. Ich habe "onCreateInputConnection" überschrieben, um einen benutzerdefinierten 'EditText' zu erstellen (siehe [hier] (https://stackoverflow.com/a/44342915/3681880) und [hier] (https://github.com/suragch/mongol- Bibliothek/Blob/Master/Mongol-Bibliothek/src/main/Java/Net/Studiomongolian/Mongolibrary/MongolEditText.java)). Jetzt versuche ich, den anderen Weg zu gehen, das heißt, mache den IME, der mit dem 'EditText' spricht. – Suragch

Antwort

0

Wie @pskink in den Kommentaren erwähnt, können Sie verwenden

InputConnection ic = editText.onCreateInputConnection(new EditorInfo()); 

, um eine Referenz auf eine EditText Eingangsverbindung zu erhalten.

Es kann an eine benutzerdefinierte Tastatur übergeben werden, wenn der EditText Fokus durch Hinzufügen eines Listeners erhält.

// get the input connection from the currently focused edit text 
editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if (hasFocus) { 
      InputConnection ic = editText.onCreateInputConnection(new EditorInfo()); 
      keyboard.setInputConnection(ic); // custom keyboard method 
     } 
    } 
}); 
Verwandte Themen