In Schlüsselzeichenzuordnungsdateien (.kcm
-Dateien) werden Kombinationen von Android-Tastencodes mit Modifikatoren Unicode-Zeichen zugeordnet.
Gerätespezifische Tastaturlayoutdateien sind für alle internen (eingebetteten) Eingabegeräte mit Tasten erforderlich, auch wenn sie nur dem System mitteilen sollen, dass das Gerät nur für einen bestimmten Zweck gedacht ist (keine vollständige Tastatur).
Gerätespezifische Tastenlayoutdateien sind für externe Tastaturen optional und werden oft gar nicht benötigt. Das System bietet eine generische Tastenbelegung, die für viele externe Tastaturen geeignet ist.
Wenn keine gerätespezifische Tastenlayoutdatei verfügbar ist, wählt das System stattdessen einen Standard aus.
Standort
Dateien mit Tastenbelegungstabellen werden anhand der ID des USB-Herstellers, des Produkts (und optional der Version) oder des Namens des Eingabegeräts gefunden.
Die folgenden Pfade werden in der Reihenfolge abgefragt.
/odm/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/vendor/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/system/usr/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/data/system/devices/keychars/Vendor_XXXX_Product_XXXX_Version_XXXX.kcm
/odm/usr/keychars/Vendor_XXXX_Product_XXXX.kcm
/vendor/usr/keychars/Vendor_XXXX_Product_XXXX.kcm
/system/usr/keychars/Vendor_XXXX_Product_XXXX.kcm
/data/system/devices/keychars/Vendor_XXXX_Product_XXXX.kcm
/odm/usr/keychars/DEVICE_NAME.kcm
/vendor/usr/keychars/DEVICE_NAME.kcm
/system/usr/keychars/DEVICE_NAME.kcm
/data/system/devices/keychars/DEVICE_NAME.kcm
/odm/usr/keychars/Generic.kcm
/vendor/usr/keychars/Generic.kcm
/system/usr/keychars/Generic.kcm
/data/system/devices/keychars/Generic.kcm
/odm/usr/keychars/Virtual.kcm
/vendor/usr/keychars/Virtual.kcm
/system/usr/keychars/Virtual.kcm
/data/system/devices/keychars/Virtual.kcm
Beim Erstellen eines Dateipfads, der den Gerätenamen enthält, werden alle Zeichen im Gerätenamen mit Ausnahme von „0“ bis „9“, „a“ bis „z“, „A“ bis „Z“, „-“ oder „_“ durch „_“ ersetzt.
Datei mit Zeichentabelle für generische Tasten
Das System bietet eine spezielle integrierte Datei mit Tastenbelegung namens Generic.kcm
.
Diese Tastenbelegung soll eine Vielzahl von Standard-externen Tastaturen unterstützen.
Ändern Sie die generische Zeichenzuordnung für Schlüssel nicht.
Datei mit Zeichentabelle für virtuelle Tasten
Das System bietet eine spezielle integrierte Tastenbelegungsdatei namens Virtual.kcm
, die von den virtuellen Tastaturen verwendet wird.
Das virtuelle Tastaturgerät ist ein synthetisches Eingabegerät mit der ID -1 (siehe KeyCharacterMap.VIRTUAL_KEYBOARD
). Es ist auf allen Android-Geräten ab Android Honeycomb 3.0 vorhanden. Das virtuelle Tastaturgerät dient als bekanntes integriertes Eingabegerät, mit dem Tastenanschläge von der IME oder von Testinstrumenten in Anwendungen eingeschleust werden können, auch auf Geräten ohne integrierte Tastatur.
Es wird davon ausgegangen, dass die virtuelle Tastatur ein vollständiges QWERTY-Layout hat, das auf allen Geräten gleich ist. So können Anwendungen Tastenanschläge über das virtuelle Tastaturgerät einschleusen und immer dieselben Ergebnisse erzielen.
Ändern Sie die Zuordnung der virtuellen Tasten nicht.
Syntax
Eine Datei mit einer Zeichentabelle ist eine Nur-Text-Datei, die eine Tastaturtypdeklaration und eine Reihe von Tastendeklarationen enthält.
Deklaration des Tastaturtyps
Eine Tastaturtypdeklaration beschreibt das Gesamtverhalten der Tastatur. Eine Zeichenzuordnungsdatei muss eine Tastaturtypdeklaration enthalten. Aus Gründen der Übersichtlichkeit wird er oft oben in der Datei platziert.
type FULL
Die folgenden Tastaturtypen werden erkannt:
-
NUMERIC
: Eine numerische Tastatur (12 Tasten).Eine Zifferntastatur unterstützt die Texteingabe per Multi-Tap. Möglicherweise müssen Sie einen Tastendruck mehrmals ausführen, um den gewünschten Buchstaben oder das gewünschte Symbol zu generieren.
Diese Art von Tastatur ist in der Regel für die Eingabe mit dem Daumen konzipiert.
Entspricht
KeyCharacterMap.NUMERIC
. -
PREDICTIVE
: Eine Tastatur mit allen Buchstaben, aber mit mehr als einem Buchstaben pro Taste.Diese Art von Tastatur ist in der Regel für die Eingabe mit dem Daumen konzipiert.
Entspricht
KeyCharacterMap.PREDICTIVE
. -
ALPHA
: Eine Tastatur mit allen Buchstaben und möglicherweise einigen Zahlen.Eine alphabetische Tastatur unterstützt die direkte Texteingabe, kann aber ein komprimiertes Layout mit einem kleinen Formfaktor haben. Im Gegensatz zu einer
FULL
-Tastatur sind einige Symbole möglicherweise nur über spezielle Zeichenauswahlen auf dem Bildschirm zugänglich. Außerdem bietet das Framework spezielle Funktionen für alphabetische Tastaturen, um die Tippgeschwindigkeit und -genauigkeit zu verbessern, z. B. die automatische Großschreibung und die gedrückte / gesperrte Umschalt- und ALT-Taste.Diese Art von Tastatur ist in der Regel für die Eingabe mit dem Daumen konzipiert.
-
FULL
: Eine vollständige PC-Tastatur.Eine Volltastatur funktioniert wie eine PC-Tastatur. Der Zugriff auf alle Symbole erfolgt direkt durch Drücken der Tasten auf der Tastatur, ohne Unterstützung auf dem Bildschirm oder Funktionen wie die automatische Großschreibung.
Diese Art von Tastatur ist in der Regel für die Eingabe mit beiden Händen konzipiert.
-
SPECIAL_FUNCTION
: Eine Tastatur, die nur zum Ausführen von Systemsteuerungsfunktionen und nicht zum Tippen verwendet wird.Eine Tastatur mit Sonderfunktionen besteht nur aus Tasten ohne Druckfunktion, z. B. „HOME“ und „EIN/AUS“, die nicht zum Tippen verwendet werden.
Die Zeichenzuordnungen für die Tasten Generic.kcm
und Virtual.kcm
sind beide FULL
-Tastaturen.
Wichtige Erklärungen
Schlüsseldeklarationen bestehen aus dem Schlüsselwort key
, gefolgt von einem Android-Schlüsselcodenamen, einem geschweiften öffnenden Bindestrich, einer Reihe von Eigenschaften und Verhaltensweisen und einem geschweiften schließenden Bindestrich.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
Properties
Jede Schlüsseleigenschaft stellt eine Zuordnung von einem Schlüssel zu einem Verhalten her. Um die Dateien mit den Tastenbelegungen kompakter zu gestalten, können mehrere Eigenschaften demselben Verhalten zugeordnet werden, indem sie durch Kommas getrennt werden.
Im obigen Beispiel ist der Property label
das Verhalten 'A'
zugewiesen.
Ebenso wird das none
-Verhalten gleichzeitig den Properties ctrl
, alt
und meta
zugewiesen.
Die folgenden Properties werden erkannt:
-
label
: Gibt das Label an, das auf dem Schlüssel gedruckt wird, wenn es aus einem einzelnen Zeichen besteht. Das ist der Wert, der von der MethodeKeyCharacterMap.getDisplayLabel
zurückgegeben wird. -
number
: Gibt das Verhalten (Zeichen, das eingegeben werden soll) an, wenn der Fokus auf einer numerischen Textansicht liegt, z. B. wenn der Nutzer eine Telefonnummer eingibt.Auf kompakten Tastaturen werden oft mehrere Symbole auf einer einzigen Taste kombiniert, sodass mit derselben Taste beispielsweise
'1'
und'a'
oder'#'
und'q'
eingegeben werden können. Für diese Tasten sollte die Eigenschaftnumber
so festgelegt werden, dass angegeben wird, welches Symbol in einem numerischen Kontext eingegeben werden soll.Zu den gängigen „numerischen“ Symbolen gehören die Ziffern
'0'
bis'9'
,'#'
,'+'
,'('
,')'
,','
und'.'
. -
base
: Gibt das Verhalten an (Zeichen, das eingegeben werden soll), wenn keine Modifikatoren gedrückt werden. -
<modifier> oder <modifier1>
+
<modifier2>+
…: Gibt das Verhalten (Zeichen, das eingegeben werden soll) an, wenn die Taste gedrückt wird und alle angegebenen Modifikatoren aktiv sind.Mit der Moduseigenschaft
shift
wird beispielsweise ein Verhalten festgelegt, das angewendet wird, wenn die Umschalttaste gedrückt wird.Ähnlich gibt die Modifikatoreigenschaft
rshift+ralt
ein Verhalten an, das angewendet wird, wenn die Modifikatoren SHIFT RECHTS und ALT RECHTS gleichzeitig gedrückt werden.
Die folgenden Modifikatoren werden in Modifikatoreigenschaften erkannt:
shift
: Wird angewendet, wenn die Umschalttaste gedrückt wird.lshift
: Wird angewendet, wenn die Umschalttaste gedrückt wird.rshift
: Wird angewendet, wenn die UMSCHALTASTE R gedrückt wird.alt
: Wird angewendet, wenn die Umschalttaste LINKS oder RECHTS gedrückt wird.lalt
: Wird angewendet, wenn die Umschalttaste gedrückt wird.ralt
: Wird angewendet, wenn die rechte ALT-Taste gedrückt wird.ctrl
: Wird angewendet, wenn die Umschalttaste gedrückt wird.lctrl
: Wird angewendet, wenn die Umschalttaste gedrückt wird.rctrl
: Wird angewendet, wenn die Umschalttaste gedrückt wird.meta
: Wird angewendet, wenn die Modifikatoren „LINKS META“ oder „RECHTS META“ gedrückt werden.lmeta
: Wird angewendet, wenn die META-Taste LINKS gedrückt wird.rmeta
: Wird angewendet, wenn die rechte META-Taste gedrückt wird.sym
: Wird angewendet, wenn die SYMBOL-Taste gedrückt wird.fn
: Wird angewendet, wenn die Funktionstaste gedrückt wird.capslock
: Wird angewendet, wenn die Feststelltaste aktiviert ist.numlock
: Wird angewendet, wenn die NUM LOCK-Modifikatortaste gesperrt ist.scrolllock
: Wird angewendet, wenn die Modifikationstaste „ROLLEN“ gesperrt ist.
Die Reihenfolge, in der die Properties aufgeführt sind, ist wichtig. Wenn ein Schlüssel einem Verhalten zugeordnet wird, durchsucht das System alle relevanten Properties der Reihe nach und gibt das zuletzt gefundene anwendbare Verhalten zurück.
Daher werden Eigenschaften, die später angegeben werden, über Eigenschaften hinweggeschrieben, die für einen bestimmten Schlüssel zuvor angegeben wurden.
Verhalten
Jede Property ist einem Verhalten zugeordnet. Am häufigsten wird ein Zeichen eingegeben, es gibt aber auch andere Möglichkeiten.
Folgende Verhaltensweisen werden erkannt:
-
none
: Geben Sie kein Zeichen ein.Dieses Verhalten ist standardmäßig aktiv, wenn kein Zeichen angegeben wird. Die Angabe von
none
ist optional, verbessert aber die Lesbarkeit. -
'X'
: Geben Sie das angegebene Zeichenliteral ein.Dadurch wird das angegebene Zeichen in die Textansicht eingegeben, die sich gerade im Fokus befindet. Das Zeichenliteral kann ein beliebiges ASCII-Zeichen oder eine der folgenden Escape-Sequenzen sein:
'\\'
: Geben Sie ein umgekehrtes Schrägstrichzeichen ein.'\n'
: Geben Sie ein Zeichen für einen neuen Absatz ein (verwenden Sie dies für die Eingabetaste).'\t'
: Geben Sie ein TAB-Zeichen ein.'\''
: Geben Sie ein Apostroph ein.'\"'
: Geben Sie ein Anführungszeichen ein.'\uXXXX'
: Geben Sie das Unicode-Zeichen ein, dessen Codepunkt in Hexadezimalschreibweise durch XXXX angegeben ist.
-
fallback
<Android-Schlüsselcodename>: Führt eine Standardaktion aus, wenn der Schlüssel nicht von der Anwendung verarbeitet wird.Dadurch simuliert das System eine andere Tastenaktivierung, wenn eine Anwendung den angegebenen Schlüssel nicht nativ verarbeitet. Er wird verwendet, um das Standardverhalten für neue Tasten zu unterstützen, die nicht von allen Anwendungen verarbeitet werden können, z. B. die ESC-Taste oder die Tasten der Ziffernblocktastatur (wenn die Numlock-Taste nicht gedrückt ist).
Wenn ein Fallback-Verhalten ausgeführt wird, erhält die Anwendung zwei Tastendrücke: einen für den ursprünglichen Schlüssel und einen für den ausgewählten Fallback-Schlüssel. Wenn die Anwendung den ursprünglichen Schlüssel während der Key Up-Ereignisse verarbeitet, wird das Fallback-Schlüsselereignis abgebrochen (
KeyEvent.isCanceled
gibttrue
zurück).
Das System reserviert zwei Unicode-Zeichen für spezielle Funktionen:
-
'\uef00'
: Bei diesem Verhalten werden die vier Zeichen vor dem Cursor von der Textansicht verwendet und entfernt, als Hexadezimalzahlen interpretiert und der entsprechende Unicode-Codepunkt eingefügt. -
'\uef01'
: Bei diesem Verhalten wird in der Textansicht ein Dialogfeld für die Zeichenauswahl mit verschiedenen Symbolen angezeigt.
Das System erkennt die folgenden Unicode-Zeichen als diakritische Zeichen:
'\u0300'
: Gravis'\u0301'
: Akutzeichen.'\u0302'
: Zirkumflex.'\u0303'
: Tilde'\u0308'
: Umlaut
Wenn ein Tottaste eingegeben wird, gefolgt von einem anderen Zeichen, werden die Tottaste und die folgenden Zeichen zusammengesetzt. Wenn der Nutzer beispielsweise einen Akzent-Deadkey gefolgt vom Buchstaben „a“ eingibt, ist das Ergebnis „à“.
Weitere Informationen zur Verarbeitung von inaktiven Schlüsseln finden Sie unter KeyCharacterMap.getDeadChar
.
Kommentare
Kommentarzeilen beginnen mit „#“ und gehen bis zum Ende der Zeile. Beispiel:
# A comment!
Leere Zeilen werden ignoriert.
Zuordnung von Tastenkombinationen zu Verhaltensweisen
Wenn der Nutzer eine Taste drückt, sucht das System nach dem Verhalten, das mit der Kombination aus dieser Tastendruck und den aktuell gedrückten Modifikatoren verknüpft ist.
Umschalttaste + A
Angenommen, der Nutzer hat A und SHIFT gleichzeitig gedrückt. Das System sucht zuerst nach den Eigenschaften und Verhaltensweisen, die mit KEYCODE_A
verknüpft sind.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
Das System scannt die Properties von Anfang bis Ende und von links nach rechts. Die Properties label
und number
werden dabei ignoriert, da sie speziell sind.
Die erste Property, die gefunden wird, ist base
. Die Property base
gilt immer für einen Schlüssel, unabhängig davon, welche Modifikatoren gedrückt werden. Sie gibt im Wesentlichen das Standardverhalten für den Schlüssel an, sofern es nicht durch die folgenden Properties überschrieben wird.
Da die Eigenschaft base
auf diese Tastenaktivierung angewendet wird, merkt sich das System, dass das Verhalten 'a'
ist (das Zeichen a
eingeben).
Das System scannt dann die nachfolgenden Properties weiter, falls eine davon spezifischer als base
ist und sie überschreibt. Es wird shift
gefunden, was auch für die Tastenkombination UMSCHALT + A gilt. Das System ignoriert daher das Verhalten der Property base
und wählt das Verhalten aus, das mit der Property shift
verknüpft ist, also 'A'
(das Zeichen A
eingeben).
Die Tabelle wird dann weiter gescannt. Für diese Tastenaktivierung gelten jedoch keine weiteren Eigenschaften (die Feststelltaste ist nicht aktiviert, die Steuerungstaste, die Alt-Taste und die Meta-Taste sind nicht gedrückt).
Das resultierende Verhalten für die Tastenkombination SHIFT + A ist also 'A'
.
STRG + A
Überlegen Sie nun, was passieren würde, wenn der Nutzer A und CONTROL gleichzeitig drückt.
Wie zuvor würde das System die Tabelle mit den Unterkünften scannen. Sie erkennt, dass das base
-Attribut angewendet wurde, scannt aber weiter, bis sie die control
-Property erreicht. Das Attribut control
wird nach base
angezeigt, sodass das Verhalten von control
das von base
überschreibt.
Das resultierende Verhalten für die Tastenkombination STRG + A ist also none
.
ESC
Angenommen, der Nutzer hat die ESC-Taste gedrückt.
key ESCAPE { base: fallback BACK alt, meta: fallback HOME ctrl: fallback MENU }
Diesmal erhält das System das Verhalten fallback BACK
, ein Fallback-Verhalten.
Da kein Zeichenliteral angezeigt wird, wird auch kein Zeichen eingegeben.
Bei der Verarbeitung des Schlüssels sendet das System zuerst KEYCODE_ESCAPE
an die Anwendung. Wenn die Anwendung dies nicht verarbeitet, versucht das System es noch einmal, sendet aber dieses Mal KEYCODE_BACK
an die Anwendung, wie vom Fallback-Verhalten angefordert.
Anwendungen, die KEYCODE_ESCAPE
erkennen und unterstützen, können den Schlüssel also so behandeln, wie er ist. Andere Anwendungen, die das nicht tun, können stattdessen die Fallback-Aktion ausführen und den Schlüssel so behandeln, als wäre er KEYCODE_BACK
.
NUMPAD_0 mit oder ohne NUM LOCK
Die Tasten der Ziffernblocktaste haben sehr unterschiedliche Funktionen, je nachdem, ob die NUM LOCK-Taste aktiviert ist.
Mit der folgenden Schlüsseldeklaration wird sichergestellt, dass KEYCODE_NUMPAD_0
0
eingibt, wenn die NUM-LOCK-Taste gedrückt ist. Wenn NUM LOCK nicht gedrückt ist, wird die Taste wie gewohnt an die Anwendung gesendet. Wenn sie nicht verarbeitet wird, wird stattdessen die Fallback-Taste KEYCODE_INSERT
gesendet.
key NUMPAD_0 { label, number: '0' base: fallback INSERT numlock: '0' ctrl, alt, meta: none }
Wie wir sehen, verbessern Fallback-Tastendeklarationen die Kompatibilität mit älteren Anwendungen erheblich, die nicht alle Tasten auf einer vollständigen PC-Tastatur erkennen oder direkt unterstützen.
Beispiele
Vollständige Tastatur
# This is an example of part of a key character map file for a full keyboard # include a few fallback behaviors for special keys that few applications # handle themselves. type FULL key C { label: 'C' base: 'c' shift, capslock: 'C' alt: '\u00e7' shift+alt: '\u00c7' ctrl, meta: none } key SPACE { label: ' ' base: ' ' ctrl: none alt, meta: fallback SEARCH } key NUMPAD_9 { label, number: '9' base: fallback PAGE_UP numlock: '9' ctrl, alt, meta: none }
Alphanumerische Tastatur
# This is an example of part of a key character map file for an alphanumeric # thumb keyboard. Some keys are combined, such as `A` and `2`. Here we # specify `number` labels to tell the system what to do when the user is # typing a number into a dial pad. # # Also note the special character '\uef01' mapped to ALT+SPACE. # Pressing this combination of keys invokes an on-screen character picker. type ALPHA key A { label: 'A' number: '2' base: 'a' shift, capslock: 'A' alt: '#' shift+alt, capslock+alt: none } key SPACE { label: ' ' number: ' ' base: ' ' shift: ' ' alt: '\uef01' shift+alt: '\uef01' }
Game pad
# This is an example of part of a key character map file for a game pad. # It defines fallback actions that enable the user to navigate the user interface # by pressing buttons. type SPECIAL_FUNCTION key BUTTON_A { base: fallback BACK } key BUTTON_X { base: fallback DPAD_CENTER } key BUTTON_START { base: fallback HOME } key BUTTON_SELECT { base: fallback MENU }
Kompatibilitätshinweis
Vor Android Honeycomb 3.0 wurde die Android-Schlüsselzeichenkarte mit einer ganz anderen Syntax angegeben und beim Build in ein Binärdateiformat (.kcm.bin
) kompiliert.
Obwohl für das neue Format dieselbe Erweiterung .kcm
verwendet wird, ist die Syntax ziemlich unterschiedlich (und viel leistungsfähiger).
Ab Android Honeycomb 3.0 müssen alle Android-Dateien mit Tastenbelegungen die neue Syntax und das in diesem Dokument beschriebene Format für Textdateien verwenden.
Die alte Syntax wird nicht unterstützt und die alten .kcm.bin
-Dateien werden vom System nicht erkannt.
Hinweis zur Sprache
Mehrsprachige Tastaturen werden derzeit von Android nicht unterstützt. Außerdem geht die integrierte generische Tastenbelegung von einem US-englischen Tastaturlayout aus.
OEMs werden empfohlen, benutzerdefinierte Tastenbelegungen für ihre Tastaturen bereitzustellen, wenn diese für andere Sprachen konzipiert sind.
In zukünftigen Versionen von Android wird möglicherweise eine bessere Unterstützung für mehrsprachige Tastaturen oder vom Nutzer wählbare Tastaturlayouts angeboten.
Zertifizierungsstufe
Validieren Sie Ihre Dateien mit Tastenbelegungstabellen mit dem Tool Validate Keymaps.