Recursos alternativos
Los recursos alternativos son aquellos recursos que tienen como destino un dispositivo específico o una configuración en tiempo de ejecución, como el idioma actual, el tamaño de pantalla concreto o la densidad de píxeles. Si Android puede encontrar un recurso más específico para un dispositivo o una configuración concretos que el recurso predeterminado, ese recurso se usará en su lugar. Si no encuentra un recurso alternativo que coincida con la configuración actual, se cargarán los recursos predeterminados. La manera en que Android decide qué recursos va a usar una aplicación se tratará con más detalle a continuación, en la sección Ubicación de recursos
Los recursos alternativos se organizan como un subdirectorio dentro de la carpeta Resources según el tipo de recurso, al igual que los recursos predeterminados. El nombre del subdirectorio de recursos alternativo tiene el formato: TipoDeRecurso-Calificador
Calificador es un nombre que identifica una configuración de dispositivo específica. Puede haber más de un calificador en un nombre, cada uno de ellos separado por un guión. Por ejemplo, en la captura de pantalla siguiente se muestra un proyecto sencillo que tiene recursos alternativos para diversas configuraciones, como configuración regional, densidad de pantalla, tamaño de pantalla y orientación:
Las reglas siguientes se aplican al agregar calificadores a un tipo de recurso:
Puede haber más de un calificador, con cada calificador separado por un guión.
Se pueden especificar los calificadores solo una vez.
Los calificadores deben estar en el orden en que aparecen en la tabla siguiente.
A continuación se enumeran los posibles calificadores a modo de referencia:
MCC y MNC: el código de país móvil (MCC) y, opcionalmente, el código de red móvil (MNC). La tarjeta SIM proporcionará el MCC, mientras que la red a la que está conectado el dispositivo proporcionará el MNC. Aunque es posible establecer como destino configuraciones regionales mediante el código de país móvil, el enfoque recomendado es usar el calificador de idioma que se especifica a continuación. Por ejemplo, para dirigir recursos a Alemania, el calificador sería
mcc262
. Para dirigir recursos de T-Mobile en EE. UU., el calificador esmcc310-mnc026
. Para obtener una lista completa de los códigos de país para dispositivos móviles y de los códigos de red, consulte http://mcc-mnc.com/.Idioma: el código de idioma ISO 639-1 de dos letras y, opcionalmente, seguido del código de región ISO-3166-alpha-2 de dos letras. Si se proporcionan ambos calificadores, se separan mediante un
-r
. Por ejemplo, para dirigirse a configuraciones regionales del francés, se usa el calificadorfr
. Para dirigirse a configuraciones regionales del francés canadiense, se usaríafr-rCA
. Para obtener una lista completa de códigos de idioma y de regiones, consulte Códigos para la representación de nombres de idiomas y Nombres de país y elementos de código.Ancho más pequeño: especifica el ancho de pantalla más pequeño en el que se va a ejecutar la aplicación. Se trata con más detalle en Creación de recursos para diferentes pantallas. Disponible en el nivel de API 13 (Android 3.2) y versiones posteriores. Por ejemplo, el calificador
sw320dp
se usa para seleccionar como destino dispositivos cuyo alto y ancho es al menos 320dp.Ancho disponible: ancho mínimo de la pantalla en el formato wNdp, donde N es el ancho en píxeles independientes de la densidad. Este valor puede cambiar a medida que el usuario gira el dispositivo. Se trata con más detalle en Creación de recursos para diferentes pantallas. Disponible en el nivel de API 13 (Android 3.2) y versiones posteriores. Ejemplo: el calificador w720dp se usa para seleccionar como destino dispositivos que tienen un ancho de al menos 720dp.
Altura disponible: altura mínima de la pantalla con el formato hNdp, donde N es la altura en dp. Este valor puede cambiar a medida que el usuario gira el dispositivo. Se trata con más detalle en Creación de recursos para diferentes pantallas. Disponible en el nivel de API 13 (Android 3.2) y versiones posteriores. Por ejemplo, el calificador h720dp se usa para seleccionar como destino dispositivos que tienen una altura de al menos 720dp.
Tamaño de pantalla: este calificador es una generalización del tamaño de pantalla para el que están diseñados estos recursos. Este tema se trata con más detalle en Creación de recursos para diferentes pantallas. Los valores posibles son
small
,normal
,large
yxlarge
. Se ha agregado en el nivel de API 9 (Android 2.3/Android 2.3.1/Android 2.3.2)Aspecto de la pantalla: se basa en la relación de aspecto, no en la orientación de la pantalla. Una pantalla larga es más ancha. Se ha agregado en el nivel de API 4 (Android 1.6). Los valores posibles son long y notlong.
Orientación de la pantalla: orientación vertical u horizontal de la pantalla. Esto puede cambiar durante la vigencia de una aplicación. Los valores posibles son
port
yland
.Modo de acoplamiento: para dispositivos en un dock para coche o un dock de escritorio. Se ha agregado en el nivel de API 8 (Android 2.2.x). Los valores posibles son
car
ydesk
.Modo nocturno: indica si la aplicación se está ejecutando por la noche o de día. Esto puede cambiar durante la vigencia de una aplicación y está pensado para ofrecer a los desarrolladores la oportunidad de usar versiones más oscuras de una interfaz por la noche. Se ha agregado en el nivel de API 8 (Android 2.2.x). Los valores posibles son
night
ynotnight
.Densidad de píxeles de la pantalla (ppp): número de píxeles de un área determinada en la pantalla física. Normalmente se expresa como puntos por pulgada (ppp). Los valores posibles son:
ldpi
: pantallas de baja densidad.mdpi
: pantallas de densidad mediahdpi
: pantallas de alta densidadxhdpi
: pantallas de alta densidad adicionalesnodpi
: recursos que no se van a escalartvdpi
: se ha presentado en el nivel de API 13 (Android 3.2) para pantallas entre mdpi y hdpi.
Tipo de pantalla táctil: especifica el tipo de pantalla táctil que puede tener un dispositivo. Los valores posibles son
notouch
(sin pantalla táctil),stylus
(una pantalla táctil resistiva adecuada para un lápiz óptico) yfinger
(una pantalla táctil).Disponibilidad del teclado: especifica qué tipo de teclado está disponible. Esto puede cambiar durante la vigencia de una aplicación, por ejemplo, cuando un usuario abre un teclado de hardware. Los valores posibles son:
keysexposed
: el dispositivo tiene un teclado disponible. Si no hay ningún teclado de software habilitado, solo se usa cuando se abre el teclado de hardware.keyshidden
: el dispositivo tiene un teclado de hardware, pero está oculto y no hay ningún teclado de software habilitado.keyssoft
: el dispositivo tiene habilitado un teclado de software.
Método de entrada de texto principal: se usa para especificar qué tipos de teclas de hardware están disponibles para la entrada. Los valores posibles son:
nokeys
: no hay teclas de hardware para la entrada.qwerty
: hay un teclado qwerty disponible.12key
: hay un teclado de hardware de 12 teclas
Disponibilidad de teclas de navegación: para cuando está disponible la navegación de 5 vías o un mando de dirección (pad direccional). Esto puede cambiar durante la vigencia de la aplicación. Los valores posibles son:
navexposed
: las teclas de navegación están disponibles para el usuario.navhidden
: las teclas de navegación no están disponibles.
Método principal de navegación no táctil: el tipo de navegación disponible en el dispositivo. Los valores posibles son:
nonav
: la única instalación de navegación disponible es la pantalla táctil.dpad
: hay un mando de dirección (pad direccional) disponible para la navegación.trackball
: el dispositivo tiene una bola de seguimiento para la navegaciónwheel
: un escenario poco común en el que hay una o más ruedas direccionales disponibles
Versión de la plataforma (nivel de API): nivel de API compatible con el dispositivo con el formato vN, donde N es el nivel de API que se va a seleccionar como destino. Por ejemplo, la versión v11 tendrá como destino un dispositivo de nivel de API 11 (Android 3.0).
Para más información sobre los calificadores de recursos, consulte Proporcionar recursos en el sitio web para desarrolladores de Android.
Cómo determina Android qué recursos usar
Es muy posible y probable que una aplicación Android contenga muchos recursos. Es importante comprender cómo Android seleccionará los recursos de una aplicación cuando se ejecute en un dispositivo.
Android determina la base de recursos mediante la iteración en la siguiente prueba de reglas:
Eliminar calificadores opuestos: por ejemplo, si la orientación del dispositivo es vertical, se rechazarán todos los directorios de recursos horizontales.
Omitir calificadores no admitidos: no todos los calificadores están disponibles para todos los niveles de API. Si un directorio de recursos contiene un calificador que no es compatible con el dispositivo, se omitirá ese directorio de recursos.
Identifique el siguiente calificador por orden de prioridad: hace referencia a la tabla anterior para seleccionar el siguiente calificador por orden de prioridad (de más alta a más baja).
Mantener los directorios de recursos del calificador: si hay directorios de recursos que coincidan con el calificador de la tabla anterior, se selecciona el siguiente calificador por orden de prioridad (de más alta a más baja).
Estas reglas también se muestran en el siguiente diagrama de flujo:
Si el sistema busca recursos específicos de densidad y no los encuentra, intentará localizar otros recursos específicos de densidad y escalarlos. Android no tiene por qué utilizar los recursos predeterminados. Por ejemplo, si busca un recurso de baja densidad y no está disponible, Android puede seleccionar la versión de alta densidad del recurso en lugar de los recursos predeterminados o de densidad media. Esto se debe a que el recurso de alta densidad se puede reducir verticalmente en un factor de 0,5, lo que provocará menos problemas de visibilidad que reducir verticalmente un recurso de densidad media que requeriría un factor de 0,75.
Por ejemplo, considere una aplicación que tenga los siguientes directorios de recursos Drawable:
drawable
drawable-en
drawable-fr-rCA
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key
Y ahora la aplicación se ejecuta en un dispositivo con la siguiente configuración:
- Configuración regional: en-GB
- Orientación: puerto
- Densidad de pantalla: hdpi
- Tipo de pantalla táctil: notouch
- Método de entrada principal: 12key
Para empezar, los recursos franceses se eliminan a medida que entran en conflicto con la configuración regional de en-GB
, lo que nos deja con:
drawable
drawable-en
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key
A continuación, se selecciona el primer calificador en la tabla de calificadores anterior: MCC y MNC. No hay directorios de recursos que contengan este calificador, por lo que se omite el código de MCC y MNC.
Se selecciona el siguiente calificador, que es Idioma. Hay recursos que coinciden con el código de idioma. Todos los directorios de recursos que no coinciden con el código de idioma de en
se rechazan, de modo que la lista de recursos es ahora:
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
El siguiente calificador que está presente es el de la orientación de pantalla, por lo que se eliminarán todos los directorios de recursos que no coincidan con la orientación de pantalla port
:
drawable-en-port
drawable-en-port-ldpi
A continuación, se muestra el calificador para la densidad de pantalla, ldpi
, lo que da como resultado la exclusión de un directorio de recursos más:
drawable-en-port-ldpi
Como resultado de este proceso, Android usará los recursos Drawable del directorio drawable-en-port-ldpi
de recursos del dispositivo.
Nota:
Los calificadores de tamaño de pantalla proporcionan una excepción a este proceso de selección. Es posible que Android seleccione recursos diseñados para una pantalla más pequeña que la que proporciona el dispositivo actual. Por ejemplo, un dispositivo de pantalla grande puede usar los recursos que se proporcionan para una pantalla de tamaño normal. Sin embargo, a la inversa no es posible: el mismo dispositivo de pantalla grande no usará los recursos proporcionados para una pantalla extragrande. Si Android no encuentra un conjunto de recursos que coincida con un tamaño de pantalla determinado, la aplicación se bloqueará.