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 metodoKeyCharacterMap.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.