Erstellen einer SoftKeyboard mit mehreren / alternativen Zeichen pro Taste
Habe ich folgte den Beispielen auf developer.android.com über Eingabemethoden und spielte mit den SoftKeyboard Beispielanwendung. Diese zusammen geben mehr als genug Informationen in Bezug auf die Schaffung von einfachen keyboard.
Was ich nicht sehen kann in der API ist die Möglichkeit zu schaffen, Alternative /mehrere Zeichen pro Taste auf der standard-Tastatur (LatinIME Tastatur).
Bild oben ist das Ergebnis eines langen drücken auf die "a" - Taste. Wenn Sie lange drücken Sie eine Taste, es ist möglich, füllen Sie ein popup mit den alternativen Zeichen.
Es ist auch möglich, ein Fenster mit einem Hinweis auf einige Tasten, die den Benutzer auffordern, drücken und halten Sie eine Taste, um das popup-Menü.
Bisher habe ich noch nicht gefunden, eine einzelne Quelle von Informationen darüber, wie dies erreicht wird, hoffentlich wird jemand in der Lage sein, um mir einen Vorsprung, bis dahin werde ich Folgen Sie den Quellcode der eingebauten Tastatur und sehen, ob ich kann reverse Engineering.
Edit: Würde helfen, wenn developer.android.com 's link, um die LatinIME Tastatur hat kein link zu einem Bild von einem Schafe 🙂 die Eigentliche source-code für LatinIME.java.
Edit 2: Mehr als Referenz als alles andere, das ist die Reihenfolge glaube ich eine übliche longPress Aktion durchläuft, um zu zeigen Sie die popup-Tastatur in KeyboardView.java:
onTouchEvent()
onModifiedTouchEvent()
mHandkler.handleMessage() with MSG_LONGPRESS
openPopupIfRequired()
onLongPress()
Edit 3:
Habe ich noch nicht dachte, dieses heraus - Wie fügen Sie label-Vorschläge zu lösen? Eine Antwort es vermuten lässt, basiert nicht in der API und in der Tat, ich habe nicht einen gefunden, der codeto tun. Jedoch ist die Tastatur auf 2.3.4 (API 10) zeigt diese Funktionalität umgesetzt:
Würde sehr gerne herausfinden, wie ES funktioniert, aber es ist nicht überall in der onDraw()
Methode, die ich sehen kann - das lässt mich glauben, dass es geschrieben wird, die außerhalb des KeyboardView element. Ich kann Sie aber nicht finden layout
- Datei verwendet, um die Anzeige der KeyboardView element auf der eingebauten Tastatur - Wenn jemand weiß, wo man diese vielleicht geben mir die Ahnung, die ich brauche.
Edit 4: Zog Taste Vorschau Frage hier, weil es etwas off-topic:
Wie sperrst du das SoftKeyboard-Taste, Vorschau-Fenster?
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
Umsetzung alternate key-popup:
Für jede Taste, die Sie möchten, um ein popup-Tastatur, Sie sollte definieren, popupCharacters und popupKeyboard:
/res/xml/[Keyboard].xml
Den
popupKeyboard
ist eine XML-Repräsentation der Tastatur verwendet, die in der popup mit den alternativen Tasten:/res/xml/keyboard_popup_template.xml
Styling die alt-Taste popup:
Wenn Sie das layout ändern möchten/Stil des popup (standardmäßig @android:layout/keyboard_popup_keyboard.xml) können Sie eine
android:popupLayout
Attribut-Punkte, die zu einer layout-Datei:Umsetzung Wichtiger Vorschau-Overlay:
Die einzige Lösung, die ich habe in der Lage zu klopfen zusammen, um Karte-Taste "Vorschau" (Ohne vollständig umschreiben der KeyboardView Quellcode) ist unter:
Einwickeln der
<KeyboardView>
tag mit einem<FrameLayout>
mit einer Höhe angegeben durch Multiplikation der keyHeight durch die Menge der Zeilen. Innerhalb dieses Tags habe ich einfach erstellt ein LinearLayout zu halten Zeilen, dann ein LinearLayout für jede Zeile eine TextView mit einem Gewicht gleich dem %p-Wert angegeben für jede<Key>
:Und Stil:
Produziert:
Ich werde nicht glücklich sein bis ich es geschafft haben, implementieren Sie diese in der gleichen Weise wie das System die Tastatur funktioniert!
InformationsquelleAutor der Antwort
Ausgehend von meinen eigenen Versuch einer Codierung ein softkeyboard fand ich heraus, dass:
KeyboardView
und im Grunde schreiben große Teile der Zeichnung code. Leider nicht tun Sie dies durch überschreiben einige der wichtigsten Methoden, da fast alles, was privat ist. Möchten Sie vielleicht einen Blick (und einige ausleihen code aus:(base)/core/java/android/inputmethodservice/KeyboardView.java
(android core code-repo)(apps)/other/LatinIME/LatinKeyboardView.java
(android core apps repo)Beachten Sie, dass die Schafe auf android.kernel.org ist es dir zu sagen, dass das repo ist geschlossen wegen Cracker, aber es spiegelt den code an anderer Stelle (verloren die links leider)
KeyboardView
hat keine Unterstützung für beschattet-Taste Hinweise, müssen Sie den code Ihrer eigenen KeyboardView eine chance zu bekommen, um das überschreiben der onDraw () - Methode.Nun auf das, was Sie kann tun:
Können Sie dieses Problem umgehen, indem Sie die Bilder für die Tasten: verwenden Sie xml -
<Key ... android:keyIcon="@drawable/this_key_icon_file />
. Leider, werden Sie sicherlich haben schlechte Ergebnisse für Buchstaben mit dieser Methode (Auflösung Probleme).Können Sie (und konfigurieren Sie Aussehen) popup-Tastatur, die erscheint, auf lange drücken.
Deklarieren Sie eine Tastatur-Vorlage
res/xml/kbd_popup_template.xml
:Deklarieren string-Werte mit den Tasten, die Sie wollen auf dieser Tastatur
res/values/strings.xml
:Verwenden Sie dann beide in Ihre Tastatur-layout definition:
Können Sie auch doppelt Antippen, triple-tap, ... Funktion zum generieren von alternativen für die Taste, die Sie Tippen sind. So zu tun, verwenden Sie einfach einen Liste für die android-Tasten:
<Key android:codes="97,224,230" .../>
produzieren, 97='
a
' für einzelne Leitungswasser, 224='à
' für double-tap-230='æ
" für dreifach-Tippen.Die Dauer zu berücksichtigen Doppeltippen festgelegt ist, zu 800ms in den android-Quellcode. Es ist leider hardcoded (und ein bisschen hoch, ich fühle mich).
Sich bewusst sein, dass, wenn Doppel-Tippen, es ist im Grunde sendet eine '
a
' first, dann, nach dem zweiten Tippen aber es sendet 'à
'. Einige apps, nicht wie diese.InformationsquelleAutor der Antwort Laurent'
Popup-Tastatur mit der Schaltfläche schließen ist ärgerlich, wenn wir nur ein popup-Charakter.
Einfachere Möglichkeit ist das überschreiben der onLongPress Methode der KeyboardView Klasse wie dieses.
InformationsquelleAutor der Antwort
Wenn Sie wollen, um text auf der Oberseite des Schlüssels, die Sie tun können, es in der onDraw () - Methode in der Klasse, überschreibt KeyboardView
InformationsquelleAutor der Antwort
Für jeden, der versucht, schließen Sie die popup-Tastatur durch Tippen außerhalb seiner Sicht-Bereich, ich hatte Glück, indem ein
TouchListener
auf dieKeyboardView
innerhalb der Klasse, die sichInputMethodService
InformationsquelleAutor der Antwort
wenn Sie wollen, um text auf der Oberseite des Schlüssels, die Sie tun können, es in der onDraw () - Methode in Ihrer Klasse, die Sie erweitert KeyboardView ich so etwas Tat vielleicht jemandem helfen kann
passen diese Achse nach Ihrer Wahl
InformationsquelleAutor der Antwort