Programando para diferentes tamanhos de tela

Categoria: Android
Publicado em 18 de Julho de 2011

A programação para múltiplas resoluções de tela em um único aplicativo tornou-se possível a partir da versão 1.6 do Android.

É necessário declarar o seguinte no arquivo de manifesto (dentro de <manifest>):

1
2
3
4
5
6
7
8
9
    <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"/>

Depois é necessário criar os layouts dentro do folder /res/:

  • Médio: /res/layout/
  • Pequeno: /res/layout-small/
  • Grande: /res/layout-large/
  • Extra Grande: /res/layout-xlarge/

Por padrão, o Android redimensiona os bitmap drawables para garantir que todos tenham o mesmo tamanho em dispositivos com telas de tamanho diferente. Isto pode fazer com que a imagem fique serrilhada ou perca a qualidade. Para evitar este defeito, deve-se criar mais alguns diretórios na pasta /res/:

  • Pequeno: /res/drawable-ldpi/
  • Médio: /res/drawable-mdpi/
  • Grande: /res/drawable-hdpi/
  • Extra Grande: /res/drawable-xhdpi/

NOTA: A partir da versão 3.2 do Android, o suporte para múltiplas resoluções é feito através do uso de outros qualifiers.  Por exemplo, para criar um layout com largura de 400 pixels, deve-se criar o folder /res/layout-sw400dp/.

Para mais informações sobre suporte para múltiplas resoluções: http://developer.android.com/guide/practices/screens_support.html

<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"/>
 

Copyright © Fernando Hidemi Uchiyama 2010 - Todos os direitos reservados