Introdução

Normalmente quando começamos a desenvolver uma aplicação, não pensamos como ela ficaria em um tablet ou algum outro dispositivo Android com um padrão de tela maior ou menor. Ao testarmos em alguns dispositivos vamos nos deparar com um programa sendo exibido em uma escala de tela “normal”, assim como mostra na Figura 1.

Exibição em tela não configurada

Figura 1: Exibição em tela não configurada

Para configurarmos os vários tamanhos de tela vamos utilizar um arquivo que todo desenvolvedor Android deve conhecer, que é o Manifest.xml. No arquivo vamos inserir um elemento conhecido como <supports-screens> dentro do elemento pai <manifest>. A estrutura deve ficar da seguinte forma:

Listagem 1: Código do elemento manifest no Manifest.xml


<manifest [...] >
    <supports-screens [...] />
    <application [...] </application>
</manifest> 

O Elemento <supports-screens> contém vários atributos que permitem especificar os tamanhos de telas suportados pela sua aplicação, e sua sintaxe é bem simples.

Listagem 2: Sintaxe do elemento supports-screens


<supports-screens android:resizeable=["true"| "false"]
                  android:smallScreens=["true" | "false"]
                  android:normalScreens=["true" | "false"]
                  android:largeScreens=["true" | "false"]
                  android:xlargeScreens=["true" | "false"]
                  android:anyDensity=["true" | "false"]
                  android:requiresSmallestWidthDp="integer"
                  android:compatibleWidthLimitDp="integer"
                  android:largestWidthLimitDp="integer"/>

Observação: os atributos android:requiresSmallestWidthDp, android:compatibleWidthLimitDp e android:largestWidthLimitDp foram inseridos na versão 3.2 do Android. A documentação diz que esses atributos devem ser utilizados para declarar o suporte de tamanho de tela.

Abaixo, especificaremos a função de cada um para que o usuário tenha uma usabilidade mais agradável.

Atributos do <supports-screens>

android:resizeable: indica se o aplicativo é redimensionável para diferentes tamanhos de tela. Ele já vem definido como “true”, caso seja definido como “false” seu aplicativo executará no modo de compatibilidade de tela nas telas grandes (large screens).

O modo de compatibilidade foi feito para aplicativos que foram desenvolvidos para versões inferiores a 3.0 do Android. Se esse modo for ativado sua activity será exibida como se tivesse dado um zoom, deixando a interface um pouco inapropriada para o usuário assim como mostra na figura 2, utilizando o Android 3.0, do lado esquerdo mostra o modo de compatibilidade ativado e do lado direito desativado.

Modo de compatibilidade ativado/desativado

Figura 2: Modo de compatibilidade ativado/desativado

Observação: esse atributo já está obsoleto. Não tendo a necessidade de utilizar, já que foi feito para ajudar na transição de aplicativos Android 1.5 para 1.6. Fará diferença na versão do Android superior a 3.0, mas não é o melhor recurso a ser utilizado, verifique abaixo os atributos android:compatibleWidthLimitDp e android:largestWidthLimitDp.

android:smallScreens: indica se o aplicativo suporta um padrão menor de tela (small screens). Uma tela menor é definida por ter uma proporção menor que o tradicional HVGA. Por padrão esse atributo já vem definido como “true”.

android:normalScreens: indica se um aplicativo suporta um padrão de tela “normal”, que seria uma tela de media densidade HVGA, mas telas de baixa densidade WQVGA e de alta densidade WVGA também são considerados normal. Por padrão esse atributo já vem definido como “true”.

android:largeScreens: indica se um aplicativo suporta um padrão de tela grande (large screens). Esse padrão de tela é definido como uma tela maior do que uma tela “normal”, requerendo alguns cuidados no desenvolvimento para fazer um uso adequado, mesmo contando com o redimensionamento do sistema para preencher toda a tela.

O valor padrão para esse atributo varia entre versões, por isso é importante sempre definí-lo. Tome cuidado com o valor “false”, pois pode habilitar o modo de compatibilidade. O mesmo procedimento do valor padrão irá se repetir no atributo android:xlargeScreens.

android:xlargeScreens: indica se um aplicativo suporta um padrão de tela extra grande (xlarge screens). Esse padrão de tela é definido como uma tela maior do que uma tela “grande”, e também requer cuidados especiais em seu desenvolvimento e podemos contar com o redimensionamento do sistema assim como a tela grande.

Esse atributo só foi inserido na API nível 9.

android:anyDensity: indica se o aplicativo inclui recursos para trabalhar com qualquer densidade de tela. Por padrão a partir da API nível 4 ou Android 1.6 e superior, este recurso é definido como “true”, não se deve definir como “false” se você não tiver certeza absoluta do que estiver fazendo. A única vez que pode ser necessário desativar é quando seu aplicativo manipula diretamente bitmaps.

android:requiresSmallestWidthDp: especifica o valor mínimo do tamanho da tela em dp (Density-independent Pixels). O smallestWidth é a menor largura exigida para a interface da sua aplicação. Assim sua aplicação fica limitada a dispositivos que tenham a largura igual ou superior a este valor. Normalmente definimos o valor do smallestWidthDp de acordo com o suporte do layout de sua aplicação (independentemente da orientação da tela).

Por exemplo, uma tela “normal” tem um smallestWidth de 320dp, uma tela de 7” de comprimento (large screen) tem um smallestWidth de 600dp e uma de 10” de comprimento (xlarge screen) tem um smallestWidth de 720dp. Geralmente estes valores são a menor dimensão da tela para diferentes tipos de dispositivos.

O valor que você irá definir deverá ser comparado de acordo com a interface de seu programa. Tendo como exemplo, definindo o tamanho de smallesWidth menor do que o tamanho de sua tela, o valor deve ser respectivo aos componentes da tela.

Você não precisará utilizar esse atributo caso seu aplicativo for redimensionado para telas menores ou uma largura mínima de 320dp.

Esse atributo só foi inserido na API nível 13.

Observação: O sistema Android não se importa com esse atributo, ele é utilizado apenas para filtragem de sua aplicação em serviços como a Google Play. Atualmente no Google Play esse atributo não é suportado para o Android 3.2, por isso que você deve utilizar os outros atributos de tamanhos de telas pequenas.

android:compatibleWidthLimitDp: permite ativar o modo de compatibilidade de tela como um recurso opcional do usuário, especificando o valor máximo do “mínimo de largura de tela” (smallestWidth) para o qual seu aplicativo foi projetado.

Se o valor do menor lado da tela de um dispositivo for maior do que o valor definido por esse atributo, é possível instalar o aplicativo, mas terá uma opção de executá-lo em modo de compatibilidade de tela que por padrão vem desativado e seu layout é redimensionado para o tamanho da tela. Porém é exibida uma opção na barra do sistema para que alterne o modo de compatibilidade, assim como mostram as figuras 3 e 4.

Modo de compatibilidade desativado

Figura 3: Modo de compatibilidade desativado

Modo de compatibilidade ativado

Figura 4: Modo de compatibilidade ativado

Se seu aplicativo é compatível com todos os tamanhos de tela e seu layout redimensiona corretamente, você não precisa usar este atributo.

Esse atributo só foi inserido na API nível 13.

Observação: atualmente o modo de compatibilidade de tela emula telas de celulares apenas com uma largura 320dp. O modo de compatibilidade de tela não é aplicado se o valor do compatibleWidthLimitDp for maior do que 320dp.

android:largestWidthLimitDp: permite ativar o modo de compatibilidade de tela como um recurso opcional do usuário, especificando o valor máximo do “mínimo de largura de tela” (smallestWidth) que seu aplicativo foi projetado.

Se o valor do menor lado da tela de um dispositivo for maior do que o valor definido por esse atributo, o aplicativo será executado em modo de compatibilidade de tela, e de nenhuma maneira será possível desativá-la.

Se seu aplicativo é compatível com todos os tamanhos de tela e seu layout redimensiona corretamente, você não precisa usar este atributo. Caso contrário, considere o uso do android:compatibleWidthLimitDp. Você dever usar esse atributo somente se sua aplicação não for funcional para telas maiores, quando ocorre o redimensionamento.

Esse atributo só foi inserido na API nível 13.

Observação: atualmente, o modo de compatibilidade de tela emula telas de celulares apenas com uma largura 320dp. O modo de compatibilidade de tela não é aplicado se o valor do compatibleWidthLimitDp for maior do que 320dp.

Conclusão

Neste artigo mostramos uma funcionalidade muito interessante e recomendada de se utilizar a <supports-screens>, essa funcionalidade permitirá que o usuário adquira uma melhor experiência e uma usabilidade confortável. Basta desenvolver seu aplicativo com sabedoria e sempre utilizar essas boas praticas. São várias regras, mas se bem configuradas seu aplicativo entenderá as configurações mínimas exigidas de vários dispositivos, proporcionando um reconhecimento e qualidade de software melhor do que muitos programas já existentes.

Lembre-se dessas regras básicas e mais primordiais. Com isso finalizo esse artigo. Até o próximo, um grande abraço e obrigado.

Referências