Deklarowanie ograniczonej obsługi ekranu

Zdecydowanie zalecamy zaprojektowanie aplikacji tak, aby dostosowywała się do wszystkich rozmiarów i gęstości ekranu, ale możesz nie chcieć, aby aplikacja obsługiwała niektóre konfiguracje ekranu. Jeśli tak, możesz ograniczyć rozmiar aplikacji przez Androida, a nawet ograniczyć urządzenia, na których można ją zainstalować, zgodnie z opisem na tej stronie.

Zanim ograniczysz aplikację do określonych ekranów, zapoznaj się ze wszystkimi technikami obsługi wielu ekranów i zaimplementuj je najlepiej, jak potrafisz.

Publikowanie oddzielnych artefaktów na różne ekrany

Jeśli nie możesz stworzyć jednej aplikacji, która obsługuje wszystkie konfiguracje ekranów, Google Play umożliwia opublikowanie wielu wersji tej samej strony. Dzięki tej funkcji możesz udostępniać osobne artefakty, które obsługują inny zestaw konfiguracji ekranu (zgodnie z zadeklarowaniem w pliku manifestu), bez tworzenia osobnych stron w Sklepie Google Play.

Jeśli na przykład chcesz opublikować aplikację zarówno na telefonie, jak i na tablety, ale nie możesz przygotować jednego pliku APK dla obu rozmiarów ekranu, możesz opublikować dwa pliki APK dla tej samej strony aplikacji. W zależności od konfiguracji ekranów urządzeń Google Play pobierze plik APK odpowiadający rozmiarowi ekranu każdego urządzenia. Pamiętaj, że w przypadku publikowania za pomocą pakietów Android App Bundle dostarczone pliki APK są automatycznie optymalizowane pod kątem gęstości ekranu. Tej samej metody należy jednak użyć w przypadku kierowania na rozmiar ekranu.

Więcej informacji znajdziesz w artykule o tworzeniu wielu plików APK dla różnych rozmiarów ekranów.

Zadeklaruj maksymalny współczynnik proporcji

Aby obsługiwać jak najwięcej urządzeń, aplikacja powinna dynamicznie dostosowywać swój układ, aby zawartość i elementy sterujące były widoczne i dobrze uporządkowane.

Większość aplikacji powinna też mieć możliwość zmiany rozmiaru, aby użytkownik mógł je uruchamiać w trybie wielu okien. Użytkownik może uruchamiać aktywność z możliwością zmiany rozmiaru w trybie podzielonego ekranu i swobodnego oraz zmieniać rozmiar aktywności, przeciągając jej boki lub rogi.

Tryb wielu okien jest dostępny we wszystkich aplikacjach na Androidzie 7.0 (poziom interfejsu API 24) lub nowszym. Rozmiar aplikacji można domyślnie zmienić. Możesz też ustawić atrybut android:resizeableActivity=true dla całej aplikacji lub konkretnych aktywności.

Android 12 (poziom interfejsu API 31) domyślnie używa trybu wielu okien. Na dużych ekranach (sw >= 600 dp) wszystkie aplikacje działają w trybie wielu okien niezależnie od ich konfiguracji. Jeśli ustawiona jest wartość resizeableActivity="false", aplikacja przechodzi w tryb zgodności, gdy jest to konieczne, by zapewnić zgodność z wymiarami wyświetlacza. Na małych ekranach (o parametrach < 600 dp) system sprawdza ustawienia minWidth, minHeight i resizeableActivity aktywności, aby określić, czy aktywność może być uruchomiona w trybie wielu okien. Jeśli ustawiona jest wartość resizeableActivity="false", aktywność nie obsługuje trybu wielu okien niezależnie od minimalnej szerokości i wysokości działania.

Jeśli nie chcesz, aby aplikacja lub aktywność działały w trybie wielu okien na poziomach 30 i niższych, ustaw resizeableActivity=false. W takim przypadku aplikacja zawsze wyświetla się na pełnym ekranie. System kontroluje ten proces w zależności od poziomu systemu operacyjnego Android:

  • Jeśli Twoja aplikacja jest kierowana na Androida od 8.0 (poziom interfejsu API 26) do 11 (poziom interfejsu API 30), wypełnia cały ekran zgodnie ze swoim układem.
  • Jeśli Twoja aplikacja jest kierowana na Androida 7.1 (poziom interfejsu API 25) lub niższy, system ogranicza rozmiar interfejsu aplikacji do okna o współczynniku proporcji 16:9 (około 1,86). Jeśli aplikacja działa na urządzeniu z większym współczynnikiem proporcji ekranu, jest wyświetlana w formacie letterbox o proporcjach 16:9, a część ekranu jest nieużywana.

Jeśli układ aplikacji nie może dostosować się do dowolnie dużych formatów obrazu, możesz wymusić stosowanie czarnych pasów na wszystkich poziomach systemu operacyjnego Android, ustawiając maksymalny współczynnik proporcji. Zalecamy współczynnik proporcji 2,4 (12:5). Gdy aplikacja zostanie uruchomiona na urządzeniu o współczynniku proporcji wyższym niż określony, aplikacja będzie wyświetlać się w czarnych pasach. Wybrana wartość musi wynosić co najmniej 1,0 w przypadku urządzeń z Wear OS i 1,33 w przypadku innych urządzeń. Jeśli określisz współczynnik mniejszy niż te limity, system będzie ograniczać współczynnik proporcji aplikacji w zależności od poziomu systemu operacyjnego, jak opisano powyżej.

Aby ustawić maksymalny współczynnik proporcji w Androidzie 8.0 (poziom interfejsu API 26) lub nowszym, zadeklaruj maksymalny współczynnik za pomocą android:maxAspectRatio w tagu <activity>. Poniższy przykład pokazuje, jak zadeklarować maksymalny współczynnik proporcji 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>

W przypadku Androida 7.1 i starszych wersji dodaj w elemencie <application> element <meta-data> o nazwie android.max_aspect w ten sposób:

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

Jeśli ustawisz maksymalny współczynnik proporcji, nie zapomnij też ustawić android:resizeableActivity false. W przeciwnym razie maksymalny współczynnik proporcji nie będzie miał wpływu.

Deklarowanie maksymalnego rozmiaru ekranu

Nawet jeśli nie zoptymalizujesz aplikacji całkowicie pod kątem obsługi różnych rozmiarów ekranów, Android nadal może dopasować większość aplikacji do większych ekranów. Dlatego określenie maksymalnego rozmiaru ekranu prawie nigdy nie jest konieczne.

Jeśli zdecydujesz się utworzyć wiele plików APK na różne rozmiary ekranów, nie musisz ograniczać pliku APK tylko do małych ekranów. Plik APK zoptymalizowany pod kątem dużych ekranów powinien mieć większy versionCode. Dlatego Google Play zawsze udostępnia ten plik APK urządzeniom z dużym ekranem.

Jeśli jednak nadal nie satysfakcjonuje Cię sposób, w jaki Android zmienia rozmiar aplikacji na duże ekrany, możesz wyłączyć zmienianie rozmiaru poza określoną szerokość, podając atrybut largestWidthLimitDp w tagu manifestu <supports-screens>. Następnie zamiast zmieniać rozmiar układu, Android włącza tryb zgodności z ekranem, który rysuje układ w największym rozmiarze obsługiwanym przez aplikację, a potem skaluje wszystkie piksele w górę, by wypełnić ekran.

Ograniczanie dostępu do aplikacji tylko na tabletach lub telewizorach

Aby uniemożliwić pobieranie aplikacji urządzeniom, użyj elementu manifestu <supports-screens>.

Na przykład ten kod deklaruje, że aplikację należy zainstalować tylko na dużych i dużych ekranach:

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

Ogranicz aplikację tylko do określonych rozmiarów i gęstości

Za pomocą elementu manifestu <compatible-screens> możesz określić dokładne rozmiary i gęstości ekranu obsługiwane przez Twoją aplikację. Zdecydowanie odradzamy jednak korzystanie z tej funkcji, ponieważ każda kombinacja rozmiaru i gęstości, której nie określisz, będzie uznawana za konfigurację ekranu, z którą Twoja aplikacja nie jest zgodna. Użycie tego elementu ułatwia blokowanie aplikacji na wielu urządzeniach, które są obsługiwane.

Element <compatible-screens> musi zawierać co najmniej 1 element <screen>. Każdy element <screen> określa konfigurację ekranu, z którą jest zgodna Twoja aplikacja, używając zarówno atrybutów android:screenSize, jak i android:screenDensity. Każdy element <screen> musi zawierać oba atrybuty służące do określania indywidualnej konfiguracji ekranu. Jeśli któregoś z nich brakuje, element jest nieprawidłowy (usługi zewnętrzne, takie jak Google Play, zignorują go).

Tak wygląda wpis w pliku manifestu, jeśli aplikacja jest zgodna tylko z małymi i normalnymi rozmiarami ekranu (oraz z podzbiorem gęstości ekranu):

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

Wszelkie kombinacje rozmiaru i gęstości, które nie zostały wyraźnie zadeklarowane w tym miejscu, nie będą mogły zainstalować aplikacji.