Dateien mit Schlüsselzeichentabellen

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 Methode KeyCharacterMap.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 Eigenschaft number 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 gibt true 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.