Register now for Android Dev Summit 2019!

Declarar o suporte restrito a telas

Apesar de recomendarmos que você projete seu aplicativo para que ele se adapte a todos os tamanhos e densidades de tela, é possível que você não queira oferecer suporte a certas configurações. Se for esse o caso, você pode limitar o quanto o Android pode redimensionar seu aplicativo ou mesmo restringir quais dispositivos podem instalá-los, conforme é descrito nesta página.

Antes de restringir seu aplicativo a certas telas, você deve entender todas as técnicas para oferecer suporte a várias telas e implementá-las da melhor forma possível.

Publicar APKs separados para diferentes telas

Caso não seja possível compilar um só APK que ofereça suporte a todas as configurações de tela, o Google Play permite que você publique vários APKs para o mesmo aplicativo. Você pode usar esse recurso para fornecer APKs separados que oferecem suportes a um conjunto diferente de configurações de tela (conforme é declarado no arquivo de manifesto) sem criar listagens separadas na Google Play Store.

Por exemplo, se quiser publicar uma versão para telefone e uma versão para tablet do seu aplicativo, mas não é possível criar um APK que funcione para ambos os tamanhos, você poderá publicar dois APKs para o mesmo aplicativo. Dependendo da configuração da tela de cada dispositivo, o Google Play fará o download do APK que corresponde o tamanho da tela de cada dispositivo.

Para saber mais, consulte Criar vários APKs para diferentes tamanhos de tela.

Declarar uma taxa de proporção máxima

Para oferecer suporte ao maior número de dispositivos possível, um aplicativo deve adaptar dinamicamente seu layout para garantir que o conteúdo e os controles estejam visíveis e bem organizados.

A maioria dos aplicativos também deve ser redimensionável para que o usuário possa executá-los no modo multijanela. O usuário pode iniciar uma atividade de redimensionamento nos modos de tela dividida e de forma livre, bem como alterar o tamanho da atividade ao arrastar laterais ou cantos.

O modo multijanela está disponível para todos os aplicativos que executam o Android 7.0 (nível de API 24) ou uma versão posterior ou para aplicativos redimensionáveis por padrão. Também é possível definir explicitamente o atributo android:resizeableActivity true para todo o aplicativo ou para atividades específicas.

Se você não quiser executar seu aplicativo ou sua atividade no modo multijanela, defina android:resizeableActivity false. Nesse caso, o aplicativo sempre aparecerá na tela inteira. O sistema controla como isso é feito, dependendo do nível do SO Android:

  • Se seu aplicativo for destinado ao Android 8.0 (nível de API 26) ou uma versão posterior, ele preencherá toda a tela, de acordo com seu layout.
  • Se seu aplicativo for destinado ao Android 7.1 (nível de API 25) ou uma versão anterior, o sistema limitará o tamanho da interface do aplicativo a uma janela com uma taxa de proporção de 16:9 (aproximadamente, 1,86). Se o aplicativo for executado em uma tela com uma taxa de proporção maior, ele será exibido em uma letterbox de 16:9 que deixa parte da tela inutilizada.

Se o layout do seu aplicativo não puder se adaptar a taxas de proporção arbitrariamente maiores, você pode impor o uso de letterboxes explicitamente em todos os níveis do SO Android ao definir uma taxa de proporção máxima. Recomendamos uma proporção de 2,4 (12:5). Seu aplicativo será exibido em uma letterbox quando for executado em um dispositivo com uma taxa de proporção maior do que a especificada. O valor selecionado deve ser de pelo menos 1,0 para dispositivos Wear OS e de pelo menos 1,33 para outros dispositivos. Se você especificar uma proporção inferior a esses limites, o sistema limitará a taxa de proporção do seu aplicativo de acordo com o nível do SO, conforme é descrito acima.

Para definir a taxa de proporção máxima para o Android 8.0 (nível de API 26) e versões posteriores, declare a proporção máxima usando android:MaxAspectRatio em sua tag <activity>. O exemplo abaixo mostra como declarar uma taxa de proporção máxima de 2,4:

<!-- Render on full screen up to screen aspect ratio of 2.4 -->
<!-- Use a letterbox on screens larger than 2.4 -->
<activity android:maxAspectRatio="2.4">
 ...
</activity>

Para o Android 7.1 e versões anteriores, adicione um elemento <meta-data> denominado android.max_aspect no elemento <application>, da seguinte forma:

<!-- Render on full screen up to screen aspect ratio of 2.4 -->
<!-- Use a letterbox on screens larger than 2.4 -->
<meta-data android:name="android.max_aspect" android:value="2.4" />

Se você definir uma taxa de proporção máxima, não se esqueça de também definir android:resizeableActivity false. Caso contrário, a taxa de proporção máxima não terá efeito.

Declarar um tamanho de tela máximo

Mesmo que você não otimize seu aplicativo por completo para oferecer suporte a diferentes tamanhos de tela, o Android ainda poderá expandir a maioria dos aplicativos para que eles caibam em telas maiores. Por isso, somente em casos raros é necessário declarar um tamanho máximo de tela.

E, se você decidir criar vários APKs para diferentes tamanhos de tela, não será preciso limitar um APK a telas pequenas, já que o APK otimizado para telas grandes deve sempre ter o versionCode maior, para que o Google Play sempre o forneça para dispositivos com esse tipo de tela.

Entretanto, se você ainda estiver insatisfeito com a forma com que o Android redimensiona seu aplicativo para telas grandes, é possível desativar o redimensionamento além de uma certa largura ao especificar o atributo largestWidthLimitDp na tag de manifesto <supports-screens>. Assim, em vez de redimensionar seu layout, o Android ativa o modo de compatibilidade de tela, que desenha seu layout como faria no maior tamanho permitido pelo aplicativo e depois expande todos os pixels para caber na tela.

Restringir seu aplicativo apenas para tablets e TVs

Você pode impedir que dispositivos portáteis façam o download do seu aplicativo usando o elemento de manifesto <supports-screens>.

O exemplo a seguir declara que apenas telas de tamanho large e xlarge devem instalar seu aplicativo:

<manifest ... >
    <supports-screens android:smallScreens="false"
                      android:normalScreens="false"
                      android:largeScreens="true"
                      android:xlargeScreens="true"/>
    ...
</manifest>

Restringir seu aplicativo somente para tamanhos e densidades específicas

Você pode definir os tamanhos e densidades de tela exatos que seu aplicativo suporte usando o elemento de manifesto <compatible-screens> . No entanto, recomendamos que você evite esse recurso, pois qualquer combinação de tamanho e densidade que você não especificar será considerada uma configuração de tela para a qual seu aplicativo não é compatível. Portanto, usar esse elemento pode impedir que seu aplicativo seja usado em muitos dispositivos para os quais ele oferece suporte.

O elemento <compatible-screens> deve conter um ou mais elementos <screen>. Cada elemento <screen> especifica uma configuração de tela com a qual seu aplicativo é compatível, usando os atributos android:screenSize e android:screenDensity . Cada elemento <screen> deve incluir ambos os atributos para especificar uma configuração de tela individual—se qualquer um deles estiver ausente, o elemento será inválido (serviços externos como o Google Play o ignorarão).

Veja a seguir como deve ser uma entrada de manifesto se seu aplicativo for compatível apenas com tamanhos de tela small e normal (e um subconjunto de densidades de tela):

<manifest ... >
    <compatible-screens>
        <!-- all small size screens -->
        <screen android:screenSize="small" android:screenDensity="ldpi" />
        <screen android:screenSize="small" android:screenDensity="mdpi" />
        <screen android:screenSize="small" android:screenDensity="hdpi" />
        <screen android:screenSize="small" android:screenDensity="xhdpi" />
        <!-- all normal size screens -->
        <screen android:screenSize="normal" android:screenDensity="ldpi" />
        <screen android:screenSize="normal" android:screenDensity="mdpi" />
        <screen android:screenSize="normal" android:screenDensity="hdpi" />
        <screen android:screenSize="normal" android:screenDensity="xhdpi" />
    </compatible-screens>
    ...
    <application ... >
        ...
    <application>
</manifest>

Qualquer combinação de tamanho e densidade não declarada aqui será impedida de instalar o aplicativo.