Déclarer une compatibilité d'écran limitée

Bien que nous vous recommandions fortement de concevoir votre application afin qu'elle puisse s'adapter à toutes les tailles et densités d'écran, il se peut que vous ne souhaitiez pas qu'elle soit compatible avec certaines configurations d'écran. Dans ce cas, vous pouvez limiter dans quelle mesure Android peut redimensionner votre application, ou même limiter les appareils autorisés à l'installer, comme décrit sur cette page.

Avant de limiter votre application à certains écrans, vous devez comprendre toutes les techniques permettant d'accepter plusieurs écrans et les implémenter du mieux possible.

Publier des artefacts distincts pour différents écrans

Dans le cas où il ne serait pas raisonnable de créer une seule application compatible avec toutes les configurations d'écran, Google Play vous permet de publier plusieurs versions pour la même fiche d'application. Vous pouvez utiliser cette fonctionnalité pour fournir des artefacts distincts compatibles avec un ensemble différent de configurations d'écran (comme déclaré dans le fichier manifeste) sans créer de fiches distinctes sur le Google Play Store.

Par exemple, si vous souhaitez publier à la fois une version pour téléphone et une version pour tablette de votre application, mais que vous ne pouvez pas faire fonctionner un seul APK pour les deux tailles d'écran, vous pouvez publier deux APK pour la même fiche d'application. En fonction de la configuration d'écran de chaque appareil, Google Play télécharge l'APK correspondant à la taille d'écran de chaque appareil. Veuillez noter que lors de la publication au format Android App Bundle, les APK fournis sont optimisés automatiquement pour la densité de l'écran. Toutefois, la même méthode doit être utilisée pour le ciblage par taille d'écran.

Pour en savoir plus, consultez la section Créer plusieurs fichiers APK pour différentes tailles d'écran.

Déclarer un format maximal

Pour prendre en charge autant d'appareils que possible, une application doit adapter sa mise en page de manière dynamique afin de s'assurer que son contenu et ses commandes sont visibles et bien organisés.

La plupart des applications doivent également être redimensionnables pour que l'utilisateur puisse les exécuter en mode multifenêtre. L'utilisateur peut lancer une activité redimensionnable dans les modes Écran partagé et Format libre, et modifier la taille de l'activité en faisant glisser ses côtés ou ses angles.

Le mode multifenêtre est disponible pour toutes les applications exécutées sous Android 7.0 (niveau d'API 24) ou version ultérieure, et les applications sont redimensionnables par défaut. Vous pouvez également définir explicitement l'attribut android:resizeableActivity=true pour une application entière ou des activités spécifiques.

Android 12 (niveau d'API 31) est défini par défaut sur le mode multifenêtre. Sur les grands écrans (SW >= 600 dp), toutes les applications s'exécutent en mode multifenêtre, quelle que soit la configuration. Si la valeur est resizeableActivity="false", l'application passe en mode de compatibilité si nécessaire, conformément aux dimensions d'affichage. Sur les petits écrans (SW < 600 dp), le système vérifie les paramètres minWidth, minHeight et resizeableActivity d'une activité pour déterminer si elle peut s'exécuter en mode multifenêtre. Si la valeur est resizeableActivity="false", l'activité n'est pas compatible avec le mode multifenêtre, quelles que soient la largeur et la hauteur minimales de l'activité.

Aux niveaux d'API 30 et inférieurs, si vous ne souhaitez pas que votre application ou votre activité s'exécutent en mode multifenêtre, définissez resizeableActivity=false. Dans ce cas, l'application apparaît toujours en plein écran. Le système contrôle cette opération, en fonction du niveau de l'OS Android:

  • Si votre application cible Android 8.0 (niveau d'API 26) à Android 11 (niveau d'API 30), elle occupe la totalité de l'écran en fonction de sa mise en page.
  • Si votre application cible Android 7.1 (niveau d'API 25) ou une version antérieure, le système limite la taille de l'interface de l'application à une fenêtre au format 16:9 (environ 1,86). Si l'application s'exécute sur un appareil avec un format d'écran plus grand, elle s'affiche au format letterbox 16:9 qui laisse une partie de l'écran inutilisée.

Si la mise en page de votre application ne peut pas s'adapter à des formats arbitrairement grands, vous pouvez appliquer explicitement le format letterbox à tous les niveaux de l'OS Android en définissant un format maximal. Nous recommandons un format de 2,4 (12:5). Votre application est mise au format letterbox lorsqu'elle s'exécute sur un appareil dont le format est supérieur à celui que vous spécifiez. La valeur que vous choisissez doit être au minimum de 1,0 pour les appareils Wear OS et d'au moins 1,33 pour les autres appareils. Si vous spécifiez un format inférieur à ces limites, le système limite le format de votre application en fonction du niveau de l'OS, comme décrit ci-dessus.

Pour définir le format maximal pour Android 8.0 (niveau d'API 26) ou version ultérieure, déclarez le format maximal à l'aide de android:maxAspectRatio dans votre balise <activity>. L'exemple suivant montre comment déclarer un format maximal 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>

Pour Android 7.1 et versions antérieures, ajoutez un élément <meta-data> nommé android.max_aspect dans l'élément <application>, comme suit:

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

Si vous définissez un format maximal, n'oubliez pas de définir également android:resizeableActivity false. Sinon, le format maximal n'a aucun effet.

Déclarer une taille d'écran maximale

Même si vous n'optimisez pas complètement votre application pour qu'elle accepte différentes tailles d'écran, Android peut toujours étirer la plupart des applications pour qu'elles s'adaptent aux écrans plus grands. Il n'est donc presque jamais nécessaire de déclarer une taille d'écran maximale.

De plus, si vous décidez de créer plusieurs APK pour différentes tailles d'écran, il n'est pas nécessaire de limiter un APK aux petits écrans uniquement. En effet, votre APK optimisé pour les grands écrans doit avoir le versionCode plus grand. Google Play fournit donc toujours cet APK aux appareils dotés d'un grand écran.

Toutefois, si vous n'êtes toujours pas satisfait de la façon dont Android redimensionne votre application pour les grands écrans, vous pouvez désactiver le redimensionnement au-delà d'une certaine largeur en spécifiant l'attribut largestWidthLimitDp dans la balise <supports-screens> du fichier manifeste. Ensuite, au lieu de redimensionner votre mise en page, Android active le mode de compatibilité de l'écran, qui dessine votre mise en page comme avec la plus grande taille acceptée par votre application, puis augmente tous les pixels pour remplir l'écran.

Limiter l'accès à votre application pour les tablettes ou les téléviseurs uniquement

Vous pouvez empêcher le téléchargement de votre application sur les téléphones portables à l'aide de l'élément du fichier manifeste <supports-screens>.

Par exemple, le code suivant déclare que seuls les grands et très grands écrans doivent installer votre application:

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

Limiter votre application à des tailles et des densités spécifiques uniquement

Vous pouvez définir les tailles et densités d'écran exactes compatibles avec votre application à l'aide de l'élément manifeste <compatible-screens>. Toutefois, nous vous recommandons vivement d'éviter de l'utiliser, car toute combinaison de taille et de densité que vous ne spécifiez pas est considérée comme une configuration d'écran avec laquelle votre application n'est pas compatible. L'utilisation de cet élément permet donc de bloquer facilement votre application sur de nombreux appareils compatibles.

L'élément <compatible-screens> doit contenir un ou plusieurs éléments <screen>. Chaque élément <screen> spécifie une configuration d'écran avec laquelle votre application est compatible, à l'aide des attributs android:screenSize et android:screenDensity. Chaque élément <screen> doit inclure les deux attributs pour spécifier une configuration d'écran individuelle. Si l'un des attributs est manquant, l'élément n'est pas valide (les services externes tels que Google Play l'ignoreront).

Voici à quoi ressemble l'entrée du fichier manifeste si votre application n'est compatible qu'avec les tailles d'écran petites et normales (et un sous-ensemble de densités d'écran):

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

Toute combinaison de taille et de densité non explicitement déclarée ici ne pourra pas installer l'application.