Los archivos de mapa de caracteres clave (archivos .kcm
) son responsables de asignar combinaciones
de los códigos de teclas de Android con modificadores a caracteres Unicode.
Los archivos de diseño de claves específicos del dispositivo son obligatorios para todos los sistemas internos (integrados). de entrada con teclas, para indicarle al sistema que el dispositivo es solo para propósitos especiales (no un teclado completo).
Los archivos de diseño de teclas específicos del dispositivo son opcionales para los teclados externos. a menudo no son necesarias. El sistema proporciona un mapa de caracteres clave genérico que es adecuado para muchos teclados externos.
Si no hay disponible un archivo de diseño de claves específico del dispositivo, el sistema elige una predeterminada.
Ubicación
Los archivos de mapa de caracteres clave se ubican por proveedor USB, producto (y, opcionalmente, versión) ID o ingresa el nombre del dispositivo.
Las siguientes rutas se consultan en orden.
/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
Cuando se construye una ruta de acceso al archivo que contiene el nombre del dispositivo, todos los caracteres en el nombre del dispositivo distinto de "0", "9", "a", "z", "A" y "Z", o "-" o “_” se reemplazan por '_'.
Archivo de mapa de caracteres clave genérico
El sistema proporciona un archivo de mapa de caracteres clave integrado especial llamado Generic.kcm
.
Este mapa de caracteres clave está diseñado para admitir una variedad de
teclados.
No modifiques el mapa de caracteres clave genérico.
Archivo de mapa de caracteres de clave virtual
El sistema proporciona un archivo de mapa de caracteres clave integrado especial llamado Virtual.kcm
que usan los teclados virtuales.
El dispositivo de teclado virtual es un dispositivo de entrada sintético cuyo ID es -1.
(consulta KeyCharacterMap.VIRTUAL_KEYBOARD
). Está presente en todos los dispositivos Android
comenzando con Android Honeycomb 3.0. El propósito del dispositivo de teclado virtual
es proporcionar un dispositivo de entrada integrado conocido que pueda usarse para inyectar
pulsaciones de teclas en las aplicaciones a través del IME o de instrumentación de prueba, incluso
para dispositivos que no tienen teclados integrados.
Se supone que el teclado virtual tiene un diseño QWERTY completo que la misma en todos los dispositivos. Esto permite que las aplicaciones inyecten con el teclado virtual y siempre obtendrás los mismos resultados.
No modifiques el mapa de caracteres de la clave virtual
Sintaxis
Un archivo de mapa de caracteres clave es un archivo de texto sin formato que consta de un tipo de teclado y un conjunto de declaraciones de clave.
Declaración del tipo de teclado
Una declaración del tipo de teclado describe el comportamiento general del teclado. Un archivo de mapa de caracteres debe contener una declaración del tipo de teclado. Para mayor claridad, a menudo se coloca en la parte superior del archivo.
type FULL
Se reconocen los siguientes tipos de teclado:
-
NUMERIC
: Es un teclado numérico (de 12 teclas).Un teclado numérico admite la entrada de texto con un enfoque de varios toques. Es posible que debas presionar una tecla varias veces para generar la letra o el símbolo deseado.
Este tipo de teclado está diseñado generalmente para la escritura con el pulgar.
Corresponde a
KeyCharacterMap.NUMERIC
. -
PREDICTIVE
: Un teclado con todas las letras, pero con más de una letra por tecla.Este tipo de teclado está diseñado generalmente para la escritura con el pulgar.
Corresponde a
KeyCharacterMap.PREDICTIVE
. -
ALPHA
: Un teclado con todas las letras y tal vez algunos números.Un teclado alfabético admite la entrada de texto directamente, pero puede tener un tono con un factor de forma pequeño. A diferencia del teclado
FULL
, algunas solo se podrá acceder a ellos con selectores de caracteres especiales en pantalla. Además, para mejorar la velocidad y exactitud de escritura, el framework proporciona funciones especiales para teclados alfabéticos, como las mayúsculas automáticas y las teclas MAYÚS y ALT. de activación o de bloqueo.Este tipo de teclado está diseñado generalmente para la escritura con el pulgar.
-
FULL
: Un teclado completo tipo PC.Un teclado completo se comporta como un teclado de PC. Se accede a todos los símbolos directamente presionando teclas en el teclado sin compatibilidad en pantalla y las mayúsculas automáticas.
En general, este tipo de teclado está diseñado para escribir totalmente con dos manos.
-
SPECIAL_FUNCTION
: Es un teclado que solo se usa para realizar funciones de control del sistema. en lugar de escribirlos.Un teclado de función especial consta solo de teclas no imprimibles, como HOME y POWER que en realidad no se usan para escribir.
Los mapas de caracteres clave Generic.kcm
y Virtual.kcm
son teclados FULL
.
Declaraciones de claves
Cada declaración de clave consta de la palabra clave key
seguida de un código de tecla de Android
una llave de apertura, un conjunto de propiedades y comportamientos y una llave de cierre.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
Propiedades
Cada propiedad de clave establece la asignación de una clave a un comportamiento. Para que el archivos de mapa de caracteres clave más compactos, se pueden asignar varias propiedades al mismo comportamiento separándolas con una coma.
En el ejemplo anterior, a la propiedad label
se le asigna el comportamiento 'A'
.
Del mismo modo, las propiedades ctrl
, alt
y meta
se asignan simultáneamente
el comportamiento de none
.
Se reconocen las siguientes propiedades:
-
label
: Especifica la etiqueta que se imprime físicamente en la clave, cuando consta de un solo carácter. Este es el valor que devuelve el métodoKeyCharacterMap.getDisplayLabel
-
number
: especifica el comportamiento (carácter que debe escribirse) cuando un valor numérico vista de texto está enfocada, como cuando el usuario está escribiendo un número de teléfono.Los teclados compactos a menudo combinan varios símbolos en una sola tecla, de modo que Se podría usar la misma clave para escribir
'1'
y'a'
, o bien'#'
y'q'
, quizás. En estas claves, se debe establecer la propiedadnumber
para indicar qué símbolo se debe escribir en un contexto numérico, si lo hay.Algunos valores “numéricos” típicos los símbolos son dígitos
'0'
a'9'
,'#'
,'+'
,'('
,')'
,','
y'.'
. -
base
: Especifica el comportamiento (carácter que se debe escribir) cuando no hay modificadores. los botones. -
<modificador> o <modifier1>
+
<modifier2>+
...: Especifica la (carácter que debe escribirse) cuando se presiona la tecla y todas los modificadores especificados están activos.Por ejemplo, la propiedad del modificador
shift
especifica un comportamiento que se aplica cuando se presiona el modificador LEFT SHIFT o RIGHT SHIFT.De manera similar, la propiedad del modificador
rshift+ralt
especifica un comportamiento que se aplica cuando se presionen los modificadores RIGHT SHIFT y RIGHT ALT.
Los siguientes modificadores se reconocen en las propiedades de los modificadores:
shift
: Se aplica cuando se presiona el modificador LEFT SHIFT o RIGHT SHIFT.lshift
: Se aplica cuando se presiona el modificador LEFT SHIFT.rshift
: Se aplica cuando se presiona el modificador RIGHT SHIFT.alt
: Se aplica cuando se presiona el modificador LEFT ALT o RIGHT ALT.lalt
: Se aplica cuando se presiona el modificador LEFT ALT.ralt
: Se aplica cuando se presiona el modificador RIGHT ALT.ctrl
: Se aplica cuando se presiona el modificador LEFT CONTROL o RIGHT CONTROL.lctrl
: Se aplica cuando se presiona el modificador LEFT CONTROL.rctrl
: Se aplica cuando se presiona el modificador RIGHT CONTROL.meta
: Se aplica cuando se presiona el modificador LEFT META o RIGHT META.lmeta
: Se aplica cuando se presiona el modificador META LEFT.rmeta
: Se aplica cuando se presiona el modificador META RIGHT.sym
: Se aplica cuando se presiona el modificador SYMBOL.fn
: Se aplica cuando se presiona el modificador FUNCTION.capslock
: Se aplica cuando el modificador BLOQUEO DE MAYÚSCULAS está bloqueado.numlock
: se aplica cuando el modificador NUM LOCK está bloqueado.scrolllock
: Se aplica cuando el modificador BLOQUEO DE DESPLAZAMIENTO está bloqueado.
El orden en el que se enumeran las propiedades es significativo. Cuando asignes una clave a un comportamiento, el sistema escanea todas las propiedades relevantes en orden y devuelve la última el comportamiento aplicable que haya encontrado.
Por lo tanto, las propiedades que se especifiquen más adelante anulan las que son especificada anteriormente para una clave determinada.
Comportamientos
Cada propiedad se asigna a un comportamiento. El comportamiento más común es escribir un carácter pero hay otros.
Se reconocen los siguientes comportamientos:
-
none
: No escribas un carácter.Este comportamiento es el predeterminado cuando no se especifica ningún carácter. Especifica
none
es opcional, pero mejora la claridad. -
'X'
: escribe el literal de caracteres especificado.Este comportamiento hace que el carácter especificado se ingrese en el campo vista de texto. El literal de caracteres puede ser cualquier carácter ASCII o uno de los las siguientes secuencias de escape:
'\\'
: escribe un carácter de barra inversa.'\n'
: escribe un carácter de línea nueva (usa esto para ENTER / RETURN).'\t'
: escribe un carácter de tabulación.'\''
: escribe un carácter de apóstrofo.'\"'
: escribe un carácter de comillas.'\uXXXX'
: escribe el carácter Unicode cuyo punto de código se proporciona en hexadecimal por XXXX.
-
fallback
<Nombre del código de tecla de Android>: Realiza una acción predeterminada si la tecla no está activa. manejada por la aplicación.Este comportamiento hace que el sistema simule una pulsación diferente de tecla cuando una aplicación no maneja la clave especificada de forma nativa. Se usa para admitir el comportamiento predeterminado para claves nuevas que no todas las aplicaciones saben manejar, como ESCAPE o las teclas numéricas (cuando no se presiona Numeral)
Cuando se realice un comportamiento de resguardo, la aplicación recibirá dos pulsaciones de teclas: una para la clave original y otra para la clave de resguardo que se seleccionó. Si la aplicación controla la clave original al activar la tecla, se usará la clave de resguardo se cancelará el evento (
KeyEvent.isCanceled
mostrarátrue
).
El sistema reserva dos caracteres Unicode para realizar funciones especiales:
-
'\uef00'
: Cuando se realiza este comportamiento, la vista de texto consume y quita el elemento cuatro caracteres que preceden al cursor, los interpreta como dígitos hexadecimales e inserta el punto de código Unicode correspondiente. -
'\uef01'
: Cuando se realiza este comportamiento, la vista de texto muestra una Diálogo del selector de caracteres que contiene símbolos varios.
El sistema reconoce los siguientes caracteres Unicode como una combinación de elementos diacríticos. caracteres clave:
'\u0300'
: Acento grave.'\u0301'
: acento agudo.'\u0302'
: acento circunflejo.'\u0303'
: Acento de virgulilla.'\u0308'
: acento simple.
Cuando se escribe una clave inactiva seguida de otro carácter, la clave interrumpida y los siguientes cuando se compongan los caracteres. Por ejemplo, cuando el usuario escribe un acento grave, está "muerto". seguida de la letra "a", el resultado es "à".
Consulta KeyCharacterMap.getDeadChar
para obtener más información sobre el manejo de claves inactivas.
Comentarios
Las líneas de comentarios comienzan con “#”. y continúa hasta el final de la línea. Me gusta:
# A comment!
Se ignoran las líneas en blanco.
Cómo se asignan las combinaciones de teclas a los comportamientos
Cuando el usuario presiona una tecla, el sistema busca el comportamiento asociado con la combinación de esa pulsación de tecla y los modificadores presionados en ese momento.
MAYÚSCULAS + A
Supongamos que el usuario presionó A y MAYÚSCULAS al mismo tiempo. El sistema primero localiza
el conjunto de propiedades y comportamientos asociados con KEYCODE_A
.
key A { label: 'A' base: 'a' shift, capslock: 'A' ctrl, alt, meta: none }
El sistema escanea las propiedades de la primera a la última y de izquierda a derecha, ignorando
las propiedades label
y number
, que son especiales.
La primera propiedad que se encontró es base
. La propiedad base
siempre se aplica a
una tecla, independientemente de los modificadores que se presionen. Básicamente, especifica la configuración
de la clave, a menos que se anule mediante las siguientes propiedades.
Como la propiedad base
se aplica a esta pulsación de tecla, el sistema toma nota
del hecho de que su comportamiento es 'a'
(escribe el carácter a
).
Luego, el sistema continúa analizando las propiedades posteriores en caso de que alguna de ellas
son más específicos que base
y la anulan. Encuentra shift
, que
también se aplica cuando se presiona MAYÚSCULAS + A. Así que el sistema decide ignorar
el comportamiento de la propiedad base
y elige el comportamiento asociado con
la propiedad shift
, que es 'A'
(escribe el carácter A
).
Luego, continúa analizando la tabla, pero no se aplican otras propiedades. Presionar la tecla (BLOQUEO DE MAYÚSCULAS no está bloqueado, ni se presiona ninguna tecla CONTROL se presiona la tecla ALT y no se presiona ninguna META).
Por lo tanto, el comportamiento resultante de la combinación de teclas SHIFT + A es 'A'
.
CONTROL + A
Ahora, considera lo que sucedería si el usuario presionara A y CONTROL al mismo tiempo.
Como antes, el sistema analizaría la tabla de propiedades. Notaría
que se aplicó la propiedad base
, pero que también continuará el análisis hasta que
finalmente llegó a la propiedad control
. Al mismo tiempo, el control
La propiedad aparece después de base
para que su comportamiento anule el comportamiento de base
.
Por lo tanto, el comportamiento resultante de la combinación de teclas CONTROL + A es none
.
Escape
Ahora, supongamos que el usuario presionó ESCAPE.
key ESCAPE { base: fallback BACK alt, meta: fallback HOME ctrl: fallback MENU }
Esta vez, el sistema obtiene el comportamiento fallback BACK
, un comportamiento de resguardo.
Debido a que no aparece ningún carácter literal, no se ingresará ningún carácter.
Cuando se procesa la clave, el sistema primero enviará KEYCODE_ESCAPE
al
y mantener la integridad de su aplicación. Si la aplicación no lo maneja, el sistema intentará
pero esta vez entregará KEYCODE_BACK
a la aplicación como
que solicita el comportamiento de resguardo.
Para que las aplicaciones que reconocen y admiten KEYCODE_ESCAPE
, tienen la
de manejarla tal como está, pero otras aplicaciones que no pueden hacerlo
Realiza la acción de resguardo para tratar la clave como si fuera KEYCODE_BACK
.
NUMPAD_0 con o sin NUM LOCK
Las teclas del teclado numérico tienen interpretaciones muy diferentes, dependiendo de si la tecla NUM LOCK está bloqueada.
La siguiente declaración de clave garantiza que KEYCODE_NUMPAD_0
tipos 0
cuando se presiona NUM LOCK. Cuando no se presiona NUM LOCK, la tecla se entrega.
a la aplicación como de costumbre y, si no se maneja, el resguardo
en su lugar, se publica la clave KEYCODE_INSERT
.
key NUMPAD_0 { label, number: '0' base: fallback INSERT numlock: '0' ctrl, alt, meta: none }
Como podemos ver, las declaraciones de claves de resguardo mejoran considerablemente la compatibilidad. con aplicaciones más antiguas que no reconocen o no admiten directamente todas las claves que están presentes en un teclado de PC completo.
Ejemplos
Teclado completo
# 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 }
Teclado alfanumérico
# 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' }
Control de juegos
# 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 de compatibilidad
Antes de Android Honeycomb 3.0, se especificaba el mapa de caracteres clave de Android.
con una sintaxis muy diferente y se compiló en un formato de archivo binario
(.kcm.bin
) durante el tiempo de compilación.
Aunque el nuevo formato usa la misma extensión .kcm
, la sintaxis es bastante
diferente (y mucho más poderoso).
A partir de Android Honeycomb 3.0, todos los archivos de mapa de caracteres clave de Android deben usar
con el nuevo formato de archivo de sintaxis y texto sin formato que se describe en este documento.
La sintaxis anterior no es compatible y no se reconocen los archivos .kcm.bin
anteriores.
por el sistema.
Nota de idioma
Actualmente, Android no admite teclados multilingües. Además, el mapa de caracteres clave genérico integrado que adopta un diseño de teclado inglés de EE.UU.
Se recomienda a los OEM que proporcionen mapas de caracteres clave personalizados para sus teclados. si están diseñados para otros lenguajes.
Es posible que las próximas versiones de Android ofrezcan una mejor compatibilidad con los teclados multilingües. o diseños de teclado que puede seleccionar el usuario.
Validación
Asegúrate de validar tus archivos de mapa de caracteres clave usando el Herramienta Validar mapas de teclas.