Partilhar via


Recursos alternativos

Recursos alternativos são os recursos direcionados a um dispositivo específico ou configuração em tempo de execução, como o idioma atual, o tamanho de tela específico ou a densidade de pixels. Se o Android puder corresponder a um recurso mais específico para um determinado dispositivo ou configuração do que o recurso padrão, esse recurso será usado. Se ele não encontrar um recurso alternativo que corresponda à configuração atual, os recursos padrão serão carregados. Como o Android decide quais recursos serão usados por um aplicativo será abordado com mais detalhes abaixo, na seção Local do Recurso

Os recursos alternativos são organizados como um subdiretório dentro da pasta Recursos de acordo com o tipo de recurso, assim como os recursos padrão. O nome do subdiretório de recurso alternativo está no formulário: ResourceType-Qualifier

Qualificador é um nome que identifica uma configuração de dispositivo específica. Pode haver mais de um qualificador em um nome, cada um separado por um traço. Por exemplo, a captura de tela abaixo mostra um projeto simples que tem recursos alternativos para várias configurações, como localidade, densidade da tela, tamanho da tela e orientação:

As seguintes regras se aplicam ao adicionar qualificadores a um tipo de recurso:

  1. Pode haver mais de um qualificador, com cada qualificador separado por um traço.

  2. Os qualificadores talvez especificados apenas uma vez.

  3. Os qualificadores devem estar na ordem em que aparecem na tabela abaixo.

Os qualificadores possíveis estão listados abaixo para referência:

  • MCC e MNC – O MCC ( código de país móvel ) e, opcionalmente, o MNC ( código de rede móvel ). O cartão sim fornecerá o MCC, enquanto a rede à qual o dispositivo está conectado fornecerá o MNC. Embora seja possível direcionar localidades usando o código do país móvel, a abordagem recomendada é usar o qualificador de idioma especificado abaixo. Por exemplo, para direcionar recursos para a Alemanha, o qualificador seria mcc262. Para direcionar recursos para o T-Mobile nos EUA, o qualificador é mcc310-mnc026. Para obter uma lista completa de códigos de país móvel e códigos de rede móvel, consulte http://mcc-mnc.com/.

  • Idioma – o código de idioma ISO 639-1 de duas letras e, opcionalmente, seguido pelo código da região ISO-3166-alpha-2 de duas letras. Se ambos os qualificadores forem fornecidos, eles serão separados por um -r. Por exemplo, para direcionar localidades de língua francesa, o qualificador de fr é usado. Para direcionar French-Canadian localidades, o fr-rCA seria usado. Para obter uma lista completa de códigos de idioma e códigos de região, consulte Códigos para a representação de nomes de idiomas e nomes de país e elementos de código.

  • Menor Largura – especifica a menor largura de tela em que o aplicativo deve ser executado. Abordado em mais detalhes em Criando recursos para telas variadas. Disponível no nível 13 da API (Android 3.2) e superior. Por exemplo, o qualificador sw320dp é usado para direcionar dispositivos cuja altura e largura são pelo menos 320dp.

  • Largura Disponível – a largura mínima da tela no formato wNdp, em que N é a largura em pixels independentes de densidade. Esse valor pode ser alterado à medida que o usuário gira o dispositivo. Abordado em mais detalhes em Criando recursos para telas variadas. Disponível no nível 13 da API (Android 3.2) e superior. Exemplo: o qualificador w720dp é usado para direcionar dispositivos que têm uma largura mínima de 720dp.

  • Altura Disponível – a altura mínima da tela no formato hNdp, em que N é a altura em dp. Esse valor pode ser alterado à medida que o usuário gira o dispositivo. Abordado em mais detalhes em Criando recursos para telas variadas. Disponível no nível 13 da API (Android 3.2) e superior. Por exemplo, o qualificador h720dp é usado para direcionar dispositivos com altura mínima de 720dp

  • Tamanho da Tela – esse qualificador é uma generalização do tamanho da tela para o qual esses recursos servem. Ele é abordado com mais detalhes em Criando recursos para telas variadas. Os valores possíveis são small, normal, large e xlarge. Adicionado no nível 9 da API (Android 2.3/Android 2.3.1/Android 2.3.2)

  • Aspecto da Tela – isso se baseia na taxa de proporção, não na orientação da tela. Uma tela longa é mais ampla. Adicionado no nível 4 da API (Android 1.6). Os valores possíveis são longos e não longos.

  • Orientação da Tela – Orientação da tela retrato ou paisagem. Isso pode mudar durante o tempo de vida de um aplicativo. Os valores possíveis são port e land.

  • Modo dock – para dispositivos em uma doca de carro ou uma doca de mesa. Adicionado no nível 8 da API (Android 2.2.x). Os valores possíveis são car e desk.

  • Modo Noturno – se o aplicativo está ou não em execução à noite ou no dia. Isso pode mudar durante o tempo de vida de um aplicativo e destina-se a dar aos desenvolvedores a oportunidade de usar versões mais escuras de uma interface à noite. Adicionado no nível 8 da API (Android 2.2.x). Os valores possíveis são night e notnight.

  • Densidade de Pixel de Tela (dpi) – o número de pixels em uma determinada área na tela física. Normalmente expresso como pontos por polegada (dpi). Os valores possíveis são:

    • ldpi – Telas de baixa densidade.

    • mdpi – Telas de densidade média

    • hdpi – Telas de alta densidade

    • xhdpi – Telas extras de alta densidade

    • nodpi – Recursos que não devem ser dimensionados

    • tvdpi – Introduzido no nível 13 da API (Android 3.2) para telas entre mdpi e hdpi.

  • Tipo touch – especifica o tipo de tela sensível ao toque que um dispositivo pode ter. Os valores possíveis são notouch (sem tela touch), stylus (uma tela sensível ao toque resistiva adequada para uma caneta) e finger (uma tela touch).

  • Disponibilidade do teclado – especifica que tipo de teclado está disponível. Isso pode mudar durante o tempo de vida de um aplicativo , por exemplo, quando um usuário abre um teclado de hardware. Os valores possíveis são:

    • keysexposed – O dispositivo tem um teclado disponível. Se não houver nenhum teclado de software habilitado, isso só será usado quando o teclado de hardware for aberto.

    • keyshidden – O dispositivo tem um teclado de hardware, mas está oculto e nenhum teclado de software está habilitado.

    • keyssoft – o dispositivo tem um teclado de software habilitado.

  • Método de entrada de texto primário – use para especificar quais tipos de chaves de hardware estão disponíveis para entrada. Os valores possíveis são:

    • nokeys – Não há chaves de hardware para entrada.

    • qwerty – Há um teclado qwerty disponível.

    • 12key – Há um teclado de hardware de 12 teclas

  • Disponibilidade da chave de navegação – para quando a navegação de 5 vias ou d-pad (directional-pad) estiver disponível. Isso pode mudar durante o tempo de vida do aplicativo. Os valores possíveis são:

    • navexposed – as chaves de navegação estão disponíveis para o usuário

    • navhidden – as chaves de navegação não estão disponíveis.

  • Método de navegação não touch primário – o tipo de navegação disponível no dispositivo. Os valores possíveis são:

    • nonav – o único recurso de navegação disponível é a tela touch

    • dpad – um d-pad (directional-pad) está disponível para navegação

    • trackball – o dispositivo tem um trackball para navegação

    • wheel – o cenário incomum em que há uma ou mais rodas direcionais disponíveis

  • Versão da plataforma (nível de API) – o nível de API com suporte do dispositivo no formato vN, em que N é o nível de API que está sendo direcionado. Por exemplo, a v11 terá como destino um dispositivo de nível de API 11 (Android 3.0).

Para obter informações mais completas sobre qualificadores de recursos, consulte Fornecendo recursos no site desenvolvedores do Android.

Como o Android determina quais recursos usar

É muito possível e provável que um aplicativo Android contenha muitos recursos. É importante entender como o Android selecionará os recursos de um aplicativo quando ele for executado em um dispositivo.

O Android determina a base de recursos iterando sobre o seguinte teste de regras:

  • Eliminar qualificadores contraditórios – por exemplo, se a orientação do dispositivo for retrato, todos os diretórios de recursos de paisagem serão rejeitados.

  • Não há suporte para qualificadores de ignorar – nem todos os qualificadores estão disponíveis para todos os níveis de API. Se um diretório de recursos contiver um qualificador que não é compatível com o dispositivo, esse diretório de recursos será ignorado.

  • Identifique o próximo qualificador de prioridade mais alta – referindo-se à tabela acima, selecione o próximo qualificador de prioridade mais alta (de cima para baixo).

  • Mantenha todos os diretórios de recursos para qualificador – se houver diretórios de recursos que correspondam ao qualificador para a tabela acima, selecione o próximo qualificador de prioridade mais alta (de cima para baixo).

Essas regras também são ilustradas no fluxograma a seguir:

Fluxograma de recursos

Quando o sistema estiver procurando recursos específicos de densidade e não puder encontrá-los, ele tentará localizar outros recursos específicos de densidade e dimensioná-los. O Android pode não usar necessariamente os recursos padrão. Por exemplo, ao procurar um recurso de baixa densidade e ele não está disponível, o Android pode selecionar a versão de alta densidade do recurso em relação aos recursos padrão ou de densidade média. Isso ocorre porque o recurso de alta densidade pode ser reduzido horizontalmente por um fator de 0,5, o que resultará em menos problemas de visibilidade do que reduzir um recurso de densidade média, o que exigiria um fator de 0,75.

Por exemplo, considere um aplicativo que tem os seguintes diretórios de recursos desenháveis:

drawable
drawable-en
drawable-fr-rCA
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

E agora o aplicativo é executado em um dispositivo com a seguinte configuração:

  • Localidade – en-GB
  • Orientação – porta
  • Densidade da tela – hdpi
  • Tipo de tela touch – notouch
  • Método de entrada principal – 12key

Para começar, os recursos franceses são eliminados à medida que entram em conflito com a localidade de en-GB, deixando-nos com:

drawable
drawable-en
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

Em seguida, o primeiro qualificador é selecionado na tabela de qualificadores acima: MCC e MNC. Não há diretórios de recursos que contenham esse qualificador, portanto, o código MCC/MNC é ignorado.

O próximo qualificador é selecionado, que é Idioma. Há recursos que correspondem ao código do idioma. Todos os diretórios de recursos que não correspondem ao código de idioma do en são rejeitados, de modo que a lista de recursos agora é:

drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi

O próximo qualificador que está presente é para orientação de tela, portanto, todos os diretórios de recursos que não correspondem à orientação da tela de port são eliminados:

drawable-en-port
drawable-en-port-ldpi

Em seguida, é o qualificador para densidade de tela, ldpi, que resulta na exclusão de mais um diretório de recursos:

drawable-en-port-ldpi

Como resultado desse processo, o Android usará os recursos desenháveis no diretório drawable-en-port-ldpi de recursos para o dispositivo.

Observação

Os qualificadores de tamanho de tela fornecem uma exceção a esse processo de seleção. É possível que o Android selecione recursos projetados para uma tela menor do que o que o dispositivo atual fornece. Por exemplo, um dispositivo de tela grande pode usar os recursos fornecidos para uma tela de tamanho normal. No entanto, o inverso disso não é verdadeiro: o mesmo dispositivo de tela grande não usará os recursos fornecidos para uma tela xlarge. Se o Android não encontrar um conjunto de recursos que corresponda a um determinado tamanho de tela, o aplicativo falhará.