File di mappe dei caratteri chiave

I file delle mappe di caratteri chiave (.kcm file) sono responsabili delle combinazioni di mappatura di codici chiave Android con tasti di modifica ai caratteri Unicode.

I file di layout delle chiavi specifici del dispositivo sono obbligatori per tutti i file interni (integrati) dispositivi di input dotati di tasti, anche per comunicare al sistema che il dispositivo è solo uno scopo speciale (non una tastiera completa).

I file di layout dei tasti specifici del dispositivo sono facoltativi per le tastiere esterne; e spesso non sono affatto necessari. Il sistema fornisce una mappa generica dei caratteri chiave adatto a molte tastiere esterne.

Se non è disponibile nessun file di layout della chiave specifico per dispositivo, il sistema e sceglierne uno predefinito.

Posizione

I file delle mappe dei caratteri chiave si trovano per fornitore USB, prodotto (e versione facoltativa) ID o per nome del dispositivo di input.

I seguenti percorsi vengono consultati in ordine.

  • /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

Quando crei un percorso file che contiene il nome del dispositivo, tutti i caratteri nel nome del dispositivo diverso da "0"-"9", "a"-"z", "A"-"Z", "-" o "_" sono sostituiti da "_".

File di mappa di caratteri chiave generico

Il sistema fornisce uno speciale file integrato di mappa dei caratteri chiave chiamato Generic.kcm. Questa mappa dei caratteri chiave ha lo scopo di supportare un'ampia gamma di tastiere.

Non modificare la mappa di caratteri chiave generica.

File di mappa dei caratteri della chiave virtuale

Il sistema fornisce uno speciale file integrato di mappa dei caratteri chiave chiamato Virtual.kcm utilizzata dalle tastiere virtuali.

La tastiera virtuale è un dispositivo di input sintetico con ID -1 (vedi KeyCharacterMap.VIRTUAL_KEYBOARD). È presente su tutti i dispositivi Android. a partire da Android Honeycomb 3.0. Lo scopo della tastiera virtuale è fornire un dispositivo di input integrato noto che può essere usato per inserire le sequenze di tasti nelle applicazioni tramite l'IME o tramite la strumentazione di test, per i dispositivi che non dispongono di tastiere integrate.

Si presume che la tastiera virtuale abbia un layout QWERTY completo, uguale su tutti i dispositivi. Ciò permette alle applicazioni di inserire le sequenze di tasti utilizzando la tastiera virtuale e ottengono sempre gli stessi risultati.

Non modificare la mappa dei caratteri chiave virtuali.

Sintassi

Un file di mappa dei caratteri dei tasti è un file di testo normale costituito da un tipo di tastiera una dichiarazione chiave e un insieme di dichiarazioni chiave.

Dichiarazione relativa al tipo di tastiera

Una dichiarazione relativa al tipo di tastiera descrive il comportamento complessivo della tastiera. Un file della mappa a caratteri deve contenere una dichiarazione relativa al tipo di tastiera. Per chiarezza, spesso si trova all'inizio del file.

type FULL

Sono riconosciuti i seguenti tipi di tastiera:

  • NUMERIC: una tastiera numerica (12 tasti).

    Una tastiera numerica supporta l'inserimento di testo utilizzando un approccio con più tocchi. Potrebbe essere necessario toccare un tasto più volte per generare la lettera o il simbolo desiderato.

    Questo tipo di tastiera è generalmente progettata per la digitazione con il pollice.

    Corrisponde a KeyCharacterMap.NUMERIC.

  • PREDICTIVE: una tastiera con tutte le lettere, ma con più di una lettera per tasto.

    Questo tipo di tastiera è generalmente progettata per la digitazione con il pollice.

    Corrisponde a KeyCharacterMap.PREDICTIVE.

  • ALPHA: una tastiera con tutte le lettere e forse alcuni numeri.

    Una tastiera alfabetica supporta direttamente l'inserimento di testo, ma potrebbe avere una descrizione con un fattore di forma ridotto. A differenza della tastiera FULL, alcune i simboli potrebbero essere accessibili soltanto tramite speciali selettori di caratteri sullo schermo. Inoltre, per migliorare la velocità e la precisione della digitazione, il framework fornisce inviti speciali per le tastiere alfabetiche, ad esempio le maiuscole automatiche e i tasti MAIUSC e ALT attivati / bloccati.

    Questo tipo di tastiera è generalmente progettata per la digitazione con il pollice.

  • FULL: una tastiera completa in stile PC.

    Una tastiera completa si comporta come la tastiera di un PC. È possibile accedere direttamente a tutti i simboli premendo i tasti della tastiera senza il supporto sullo schermo o gli inviti maiuscole e minuscole.

    Questo tipo di tastiera è generalmente progettata per la digitazione completa con due mani.

  • SPECIAL_FUNCTION: una tastiera utilizzata solo per eseguire funzioni di controllo di sistema anziché per la digitazione.

    Una tastiera con funzioni speciali è composta solo da tasti non stampabili come HOME e POWER che non vengono effettivamente usati per digitare.

Le mappe dei caratteri chiave Generic.kcm e Virtual.kcm sono entrambe tastiere FULL.

Dichiarazioni chiave

Ciascuna dichiarazione chiave è composta dalla parola chiave key seguita da un codice chiave Android una parentesi graffa aperta, un insieme di proprietà e comportamenti e una parentesi graffa chiusa.

key A {
    label:                              'A'
    base:                               'a'
    shift, capslock:                    'A'
    ctrl, alt, meta:                    none
}

Proprietà

Ogni proprietà della chiave stabilisce una mappatura da una chiave a un comportamento. Per fare in modo che dei caratteri chiave, più compatti, è possibile mappare diverse proprietà lo stesso comportamento separandoli con una virgola.

Nell'esempio precedente, alla proprietà label viene assegnato il comportamento 'A'. Allo stesso modo, le proprietà ctrl, alt e meta vengono tutte assegnate il comportamento di none.

Sono riconosciute le seguenti proprietà:

  • label: specifica l'etichetta stampata fisicamente sul token, quando viene è costituito da un solo carattere. Si tratta del valore restituito il metodo KeyCharacterMap.getDisplayLabel.

  • number: specifica il comportamento (carattere che deve essere digitato) quando viene utilizzato un valore è attivo, ad esempio quando l'utente sta digitando un numero di telefono.

    Le tastiere compatte spesso combinano più simboli in un unico tasto, in modo da la stessa chiave potrebbe essere usata per digitare '1' e 'a' o forse '#' e 'q'. Per queste chiavi, la proprietà number deve essere impostata per indicare il simbolo dovrebbero essere digitate in un contesto numerico, se presente.

    Alcuni "numerici" tipici I simboli sono cifre da '0' a '9', '#', '+', '(', ')', ',' e '.'.

  • base: specifica il comportamento (carattere che deve essere digitato) quando non sono presenti modificatori sono stati premute.

  • <modificatore> o <modifier1>+<modifier2>+...: specifica (il carattere che deve essere digitato) quando viene premuto il tasto e tutti i tasti sono attivi i modificatori specificati.

    Ad esempio, la proprietà del modificatore shift specifica un comportamento che si applica quando premi il tasto di modifica MAIUSC SINISTRA o MAIUSC DESTRA.

    Analogamente, la proprietà del modificatore rshift+ralt specifica un comportamento che si applica quando i tasti di modifica MAIUSC DESTRA e ALT DESTRA vengono premuti contemporaneamente.

Nelle proprietà di modifica sono riconosciuti i seguenti modificatori:

  • shift: si applica quando viene premuto il tasto di modifica MAIUSC SINISTRO o MAIUSC DESTRO.
  • lshift: si applica quando viene premuto il tasto di modifica MAIUSC SINISTRA.
  • rshift: si applica quando viene premuto il tasto di modifica MAIUSC DESTRA.
  • alt: si applica quando viene premuto il tasto di modifica ALT SINISTRA o ALT DESTRA.
  • lalt: si applica quando viene premuto il tasto di modifica ALT SINISTRA.
  • ralt: si applica quando viene premuto il tasto di modifica ALT DESTRA.
  • ctrl: si applica quando viene premuto il tasto di modifica CONTROLLO SINISTRO o CONTROLLO DESTRO.
  • lctrl: si applica quando viene premuto il tasto di modifica CONTROLLO SINISTRO.
  • rctrl: si applica quando viene premuto il tasto di modifica CONTROLLO DESTRO.
  • meta: si applica quando viene premuto il tasto di modifica META SINISTRA o META DESTRA.
  • lmeta: si applica quando viene premuto il tasto di modifica META SINISTRA.
  • rmeta: si applica quando viene premuto il tasto di modifica META DESTRO.
  • sym: si applica quando viene premuto il tasto di modifica SYMBOL.
  • fn: si applica quando viene premuto il tasto di modifica FUNCTION.
  • capslock: si applica quando il tasto di modifica BLOC MAIUSC è bloccato.
  • numlock: si applica quando il tasto di modifica NUM LOCK è bloccato.
  • scrolllock: si applica quando il tasto di modifica BLOCCO SCORRIMENTO è bloccato.

L'ordine in cui sono elencate le strutture è importante. Quando si mappa una chiave un comportamento, il sistema analizza tutte le proprietà pertinenti in ordine e restituisce l'ultima il comportamento applicabile che ha rilevato.

Di conseguenza, le proprietà specificate in seguito sostituiscono quelle che sono specificato in precedenza per una determinata chiave.

Comportamenti

Ogni proprietà è mappata a un comportamento. Il comportamento più comune è digitare un carattere ma ce ne sono altri.

Sono riconosciuti i seguenti comportamenti:

  • none: non digitare alcun carattere.

    Questo comportamento è quello predefinito se non viene specificato alcun carattere. Specifica di none è facoltativo, ma migliora la chiarezza.

  • 'X': digita il valore letterale del carattere specificato.

    Questo comportamento fa sì che il carattere specificato venga inserito nello stato attivo visualizzazione testo. Il valore letterale può essere qualsiasi carattere ASCII o uno dei le seguenti sequenze di escape:

    • '\\': digita una barra rovesciata.
    • '\n': digita un nuovo carattere di riga (utilizzalo per INVIO / INVIO).
    • '\t': digita un carattere TAB.
    • '\'': digita un carattere apostrofo.
    • '\"': digita una virgoletta.
    • '\uXXXX': digita il carattere Unicode il cui punto di codice è espresso in esadecimale da XXXX.
  • fallback <nome in codice della chiave Android>: esegue un'azione predefinita se il tasto gestiti dall'applicazione.

    Questo comportamento fa sì che il sistema simula una pressione diversa di un tasto quando un'applicazione non gestisce la chiave specificata in modo nativo. Viene utilizzato per supportare il comportamento predefinito per le nuove chiavi che non tutte le applicazioni sanno gestire, come ESCAPE o tasti numerici (quando non viene premuto il tasto numlock).

    Quando viene eseguito un comportamento di fallback, l'applicazione riceve due pressioni di tasti: una per la chiave originale e un'altra per la chiave di riserva selezionata. Se l'applicazione gestisce la chiave originale durante la keyup, la chiave di fallback verrà annullato (KeyEvent.isCanceled restituirà true).

Il sistema riserva due caratteri Unicode per eseguire funzioni speciali:

  • '\uef00': quando viene eseguito questo comportamento, la visualizzazione testo utilizza e rimuove il parametro quattro caratteri che precedono il cursore, li interpreta come cifre esadecimali e inserisce il punto di codice Unicode corrispondente.

  • '\uef01': quando viene eseguito questo comportamento, la visualizzazione di testo mostra una finestra di dialogo del selettore di caratteri che contiene simboli vari.

Il sistema riconosce i seguenti caratteri Unicode come una combinazione di morti diacritici caratteri chiave:

  • '\u0300': Accento grave.
  • '\u0301': accento acuto.
  • '\u0302': accento circonflesso.
  • '\u0303': Accento tilde.
  • '\u0308': accento umlaut.

Quando viene digitato un tasto morto seguito da un altro carattere, il tasto non riuscito e caratteri. Ad esempio, quando un utente digita un accento grave morto. seguito dalla lettera "a", il risultato è "à".

Fai riferimento a KeyCharacterMap.getDeadChar per ulteriori informazioni sulla gestione delle chiavi non recapitabili.

Commenti

Le righe dei commenti iniziano con "#" e prosegui fino alla fine della riga. in questo modo:

# A comment!

Le righe vuote vengono ignorate.

Come vengono associate le combinazioni di tasti ai comportamenti

Quando l'utente preme un tasto, il sistema ricerca il comportamento associato al la combinazione della pressione del tasto e dei tasti di modifica attualmente premuti.

MAIUSC+A

Supponiamo che l'utente abbia premuto A e MAIUSC insieme. Per prima cosa, il sistema individua l'insieme di proprietà e comportamenti associati a KEYCODE_A.

key A {
    label:                              'A'
    base:                               'a'
    shift, capslock:                    'A'
    ctrl, alt, meta:                    none
}

Il sistema scansiona le proprietà dalla prima all'ultima e da sinistra a destra, ignorando le proprietà label e number, che sono speciali.

La prima proprietà rilevata è base. La proprietà base si applica sempre a un tasto, indipendentemente dai tasti di modifica premuti. Essenzialmente specifica il valore predefinito comportamento predefinito della chiave, a meno che non venga sostituito dalle seguenti proprietà. Poiché la proprietà base si applica alla pressione del tasto, il sistema prende nota del fatto che il suo comportamento sia 'a' (digita il carattere a).

Il sistema continua quindi a scansionare le proprietà successive nel caso una di esse sono più specifici di base e lo sostituiscono. Rileva shift che si applica anche alla pressione del tasto MAIUSC + A. Quindi il sistema decide di ignorare il comportamento della proprietà base e sceglie il comportamento associato a la proprietà shift, che è 'A' (digita il carattere A).

Continua quindi a eseguire la scansione della tabella, ma nessun'altra proprietà si applica alla tabella. pressione del tasto (BLOC MAIUSC non è bloccato, né il tasto CONTROL è premuto, né viene premuto il tasto ALT e nessuno dei due tasti META viene premuto.

Pertanto, il comportamento risultante per la combinazione di tasti MAIUSC + A è 'A'.

CTRL+A

Ora pensa a cosa accadrebbe se l'utente premesse A e CONTROL insieme.

Come in precedenza, il sistema analizza la tabella delle proprietà. Avrebbe notato applicata la proprietà base, ma continuerà anche l'analisi finché alla fine ha raggiunto la proprietà control. In quel momento, control viene visualizzata dopo base, quindi il suo comportamento sostituisce il comportamento base.

Pertanto, il comportamento risultante per la combinazione di tasti CONTROL + A è none.

ESC

Supponiamo ora che l'utente abbia premuto ESCAPE.

key ESCAPE {
    base:                               fallback BACK
    alt, meta:                          fallback HOME
    ctrl:                               fallback MENU
}

Questa volta il sistema ottiene il comportamento fallback BACK, un comportamento di riserva. Poiché non viene visualizzato alcun valore letterale, non verrà digitato alcun carattere.

Durante l'elaborazione della chiave, il sistema innanzitutto invia KEYCODE_ESCAPE alla un'applicazione. Se l'applicazione non la gestisce, il sistema proverà a di nuovo, ma questa volta fornirà KEYCODE_BACK all'applicazione come come richiesto dal comportamento di fallback.

Quindi le applicazioni che riconoscono e supportano KEYCODE_ESCAPE hanno di gestirlo così com'è, ma altre applicazioni che invece non possono eseguire l'azione di riserva trattando la chiave come se fosse KEYCODE_BACK.

NUMPAD_0 con o senza NUM LOCK

I tasti del tastierino numerico hanno interpretazioni molto diverse a seconda che il tasto NUM LOCK è bloccato.

La seguente dichiarazione chiave garantisce che KEYCODE_NUMPAD_0 digiti 0 quando premi NUM LOCK. Se non premi NUM LOCK, il tasto viene consegnato all'applicazione come al solito e, se non viene gestito, il codice viene consegnata invece la chiave KEYCODE_INSERT.

key NUMPAD_0 {
    label, number:                      '0'
    base:                               fallback INSERT
    numlock:                            '0'
    ctrl, alt, meta:                    none
}

Come possiamo vedere, le dichiarazioni chiave di fallback migliorano notevolmente la compatibilità con applicazioni meno recenti che non riconoscono o non supportano direttamente tutte le chiavi che sono presenti su una tastiera in stile PC.

Esempi

Tastiera completa

# 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
}

Tastiera alfanumerica

# 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
}

Nota sulla compatibilità

Prima di Android Honeycomb 3.0, veniva specificata la mappa dei caratteri chiave di Android usando una sintassi molto diversa ed è stato compilato in un formato file binario (.kcm.bin) al momento della creazione.

Anche se il nuovo formato utilizza la stessa estensione .kcm, la sintassi è abbastanza diversi (e molto più potenti).

A partire da Android Honeycomb 3.0, tutti i file di mappe dei caratteri chiave di Android devono utilizzare la nuova sintassi e il formato file di testo normale descritti in questo documento. La sintassi precedente non è supportata e i file .kcm.bin precedenti non vengono riconosciuti dal sistema.

Nota lingua

Android al momento non supporta le tastiere multilingue. Inoltre, la mappa generica integrata dei caratteri dei tasti assume un layout di tastiera inglese americano.

Gli OEM sono invitati a fornire mappe personalizzate dei caratteri dei tasti per le loro tastiere se sono pensate per altre lingue.

Le versioni future di Android potrebbero fornire un supporto migliore per le tastiere multilingue o con layout di tastiera selezionabili dall'utente.

Convalida

Assicurati di convalidare i file delle mappe dei caratteri chiave utilizzando il metodo Convalida le mappe dei tasti.