Dichiara il supporto dello schermo limitato

Anche se consigliamo vivamente di progettare l'app in modo che si adatti a tutte le dimensioni e le densità degli schermi, potresti comunque non volere che l'app supporti determinate configurazioni dello schermo. In tal caso, puoi limitare il livello di ridimensionamento della tua app da parte di Android o persino limitare i dispositivi che possono installarla, come descritto in questa pagina.

Prima di limitare la tua app a determinate schermate, dovresti comprendere tutte le tecniche per supportare più schermate e implementarle al meglio delle tue capacità.

Pubblica elementi separati per schermate diverse

Nel caso in cui non sia irragionevole per te creare una singola app che supporti tutte le configurazioni dello schermo, Google Play ti consente di pubblicare più versioni per la stessa scheda. Puoi utilizzare questa funzionalità per fornire elementi separati che supportano un insieme diverso di configurazioni dello schermo (come dichiarato nel file manifest) senza creare schede separate nel Google Play Store.

Ad esempio, se desideri pubblicare sia una versione per smartphone sia una versione per tablet della tua app, ma non riesci a far funzionare un solo APK per entrambe le dimensioni dello schermo, puoi pubblicare due APK per la stessa scheda dell'app. A seconda della configurazione dello schermo del dispositivo, Google Play scaricherà l'APK corrispondente alle dimensioni dello schermo di ciascun dispositivo. Tieni presente che, quando pubblichi contenuti utilizzando Android App Bundle, gli APK pubblicati vengono ottimizzati automaticamente per la densità dello schermo. Devi usare lo stesso metodo, ma in caso di targeting per dimensione dello schermo.

Per ulteriori informazioni, consulta la sezione Creazione di più APK per schermi di dimensioni diverse.

Dichiara le proporzioni massime

Per supportare il maggior numero possibile di dispositivi, un'app deve adattare dinamicamente il suo layout per garantire che i contenuti e i controlli siano visibili e ben organizzati.

La maggior parte delle app dovrebbe anche essere ridimensionabile in modo che l'utente possa eseguirle in modalità multi-finestra. L'utente può avviare un'attività ridimensionabile in modalità schermo diviso e in formato libero e modificare le dimensioni dell'attività trascinandone i lati o gli angoli.

La modalità multi-finestra è disponibile per tutte le app eseguite in Android 7.0 (livello API 24) o versioni successive e le app sono ridimensionabili per impostazione predefinita. Puoi anche impostare esplicitamente l'attributo android:resizeableActivity=true per un'intera app o attività specifiche.

Per impostazione predefinita, Android 12 (livello API 31) è in modalità multi-finestra. Su schermi di grandi dimensioni (sw >= 600 dp), tutte le app vengono eseguite in modalità multi-finestra, indipendentemente dalla loro configurazione. Se resizeableActivity="false", l'app viene attivata in modalità di compatibilità quando necessario per conformarsi alle dimensioni del display. Su schermi di piccole dimensioni (sw < 600 dp), il sistema controlla le impostazioni di minWidth, minHeight e resizeableActivity di un'attività per determinare se l'attività può essere eseguita in modalità multi-finestra. Se resizeableActivity="false", l'attività non supporta la modalità multi-finestra indipendentemente dall'altezza e dalla larghezza minime dell'attività.

Ai livelli API 30 e precedenti, se non vuoi che l'app o l'attività venga eseguita in modalità multi-finestra, imposta resizeableActivity=false. In questo caso, l'app viene sempre visualizzata a schermo intero. Il sistema controlla come eseguire questa operazione, a seconda del livello di sistema operativo Android:

  • Se la tua app ha come target Android 8.0 (livello API 26) e Android 11 (livello API 30), l'app riempirà l'intero schermo in base al suo layout.
  • Se la tua app ha come target Android 7.1 (livello API 25) o versioni precedenti, il sistema limita le dimensioni dell'interfaccia dell'app a una finestra con proporzioni 16:9 (circa 1,86). Se l'app viene eseguita su un dispositivo con proporzioni dello schermo più grandi, l'app viene visualizzata in una letterbox 16:9 che lascia parte dello schermo inutilizzata.

Se il layout della tua app non può adattarsi a proporzioni arbitrarie, puoi applicare esplicitamente il letterbox a tutti i livelli del sistema operativo Android impostando proporzioni massime. Consigliamo un rapporto di 2,4 (12:5). L'app verrà visualizzata in formato letterbox quando è in esecuzione su un dispositivo con proporzioni maggiori di quelle specificate. Il valore scelto deve essere almeno 1,0 per i dispositivi Wear OS e almeno 1,33 per gli altri dispositivi. Se specifichi un rapporto inferiore a questi limiti, il sistema limita le proporzioni dell'app a seconda del livello del sistema operativo, come descritto in precedenza.

Per impostare le proporzioni massime per Android 8.0 (livello API 26) e versioni successive, dichiara le proporzioni massime utilizzando android:maxAspectRatio nel tag <activity>. Nell'esempio seguente viene illustrato come dichiarare proporzioni massime di 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>

Per Android 7.1 e versioni precedenti, aggiungi un elemento <meta-data> denominato android.max_aspect all'elemento <application>, come indicato di seguito:

<!-- 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 imposti proporzioni massime, non dimenticare di impostare anche android:resizeableActivity false. In caso contrario, le proporzioni massime non avranno alcun effetto.

Dichiara le dimensioni massime dello schermo

Anche se non ottimizzi completamente la tua app per supportare schermi di dimensioni diverse, Android può comunque estendere la maggior parte delle app per adattarle a schermi più grandi. Quindi non è quasi mai necessario dichiarare la dimensione massima dello schermo.

Se decidi di creare più APK per schermi di dimensioni diverse, non è necessario limitare un APK soltanto agli schermi di piccole dimensioni, perché l'APK ottimizzato per gli schermi di grandi dimensioni dovrebbe avere il formato versionCode più grande, pertanto Google Play fornisce sempre l'APK ai dispositivi con schermo grande.

Tuttavia, se non sei ancora soddisfatto del modo in cui Android ridimensiona la tua app per gli schermi di grandi dimensioni, puoi disattivare il ridimensionamento oltre una determinata larghezza specificando l'attributo largestWidthLimitDp nel tag manifest <supports-screens>. Dopodiché, anziché ridimensionare il layout, Android attiva la modalità di compatibilità dello schermo, che traccia il layout come se fosse la dimensione massima supportata dalla tua app, quindi scala tutti i pixel per riempire lo schermo.

Limitare l'app solo per tablet o TV

Puoi impedire ai dispositivi smartphone di scaricare la tua app utilizzando l'elemento manifest <supports-screens>.

Ad esempio, quanto segue dichiara che l'installazione dell'app deve essere installata solo su schermi di grandi dimensioni e xlarge:

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

Limitare l'app solo per dimensioni e densità specifiche

Puoi definire le dimensioni e le densità esatte dello schermo supportate dalla tua app utilizzando l'elemento manifest <compatible-screens>. Tuttavia, ti consigliamo vivamente di non utilizzarla, perché qualsiasi combinazione di dimensioni e densità non specificata viene considerata una configurazione dello schermo con la quale la tua app non è compatibile. Pertanto, l'utilizzo di questo elemento ti consente di bloccare facilmente la tua app da molti dispositivi che l'app può effettivamente supportare.

L'elemento <compatible-screens> deve contenere uno o più elementi <screen>. Ogni elemento <screen> specifica una configurazione dello schermo con la quale la tua app è compatibile, utilizzando entrambi gli attributi android:screenSize e android:screenDensity. Ogni elemento <screen> deve includere entrambi gli attributi per specificare una singola configurazione della schermata. Se manca uno dei due attributi, l'elemento non è valido (servizi esterni come Google Play lo ignorerà).

Ecco l'aspetto della voce del file manifest se la tua app è compatibile solo con dimensioni dello schermo piccole e normali (e un sottoinsieme di densità dello schermo):

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

Qualsiasi combinazione di dimensione e densità non dichiarata esplicitamente qui non potrà installare l'app.