宣告僅支援部分螢幕尺寸

雖然我們強烈建議您設計應用程式,以便能配合所有螢幕大小和密度,但可能仍然不希望應用程式支援某些螢幕設定。此時,您可以按照本頁所述,限制 Android 調整應用程式大小,甚至限制哪些裝置可以安裝該應用程式。

將應用程式限制在特定螢幕前,建議您先瞭解支援多個螢幕的所有技巧,並盡可能實作這些內容。

針對不同螢幕發布個別構件

為避免您建構一款支援所有螢幕設定的單一應用程式,Google Play 可讓您為同一個應用程式資訊發布多個版本。您可以使用這項功能提供個別的構件,讓每個構件支援不同的螢幕設定 (如資訊清單檔案中宣告),而不必在 Google Play 商店中另外建立商店資訊。

舉例來說,如果您想同時發布手機版和平板電腦版應用程式,但無法讓兩個螢幕大小都適用的一個 APK,您可以為同一個應用程式資訊發布兩個 APK。視每部裝置的螢幕設定而定,Google Play 會下載符合各裝置螢幕大小的 APK。請注意,使用 Android App Bundle 發布時,系統會針對螢幕密度自動最佳化提交的 APK,但必須使用相同的方法才能指定螢幕大小。

詳情請參閱「針對不同螢幕大小建立多個 APK」。

宣告最大顯示比例

為了盡可能支援更多裝置,應用程式應動態調整版面配置,確保內容和控制項清楚顯示且井然有序。

多數應用程式也都應該可調整大小,以便使用者能在多視窗模式中執行這些應用程式。使用者可以在分割畫面和任意形式模式下啟動可調整大小的活動,並拖曳活動的側邊或角落來變更活動大小。

在 Android 7.0 (API 級別 24) 以上版本中執行的所有應用程式都可使用多視窗模式,而且應用程式預設可以調整大小。您也可以明確設定整個應用程式或特定活動的屬性 android:resizeableActivity=true

Android 12 (API 級別 31) 預設為多視窗模式。在大螢幕上 (sw >= 600dp),無論應用程式設定為何,所有應用程式都將以多視窗模式執行。如果 resizeableActivity="false",應用程式會在必要時進入相容模式,以符合螢幕尺寸。在小螢幕上 (sw < 600dp),系統會檢查活動的 minWidthminHeightresizeableActivity 設定,判斷該活動是否能以多視窗模式執行。如果設為 resizeableActivity="false",無論活動的最小寬度和高度為何,該活動都不支援多視窗模式。

在 API 級別 30 以下版本中,如果您不希望應用程式或活動以多視窗模式執行,請設定 resizeableActivity=false。在這種情況下,應用程式一律會以全螢幕顯示。系統會根據 Android 作業系統層級來控管執行這項操作的方式:

  • 如果您的應用程式指定 Android 8.0 (API 級別 26) 至 Android 11 (API 級別 30) 版本,應用程式會根據版面配置填滿整個螢幕。
  • 如果您的應用程式指定 Android 7.1 (API 級別 25) 以下版本,系統會限制應用程式介面的大小至顯示比例為 16:9 (約 1.86) 的視窗。如果應用程式在螢幕較大的顯示比例裝置上執行,則應用程式會顯示在 16:9 的上下黑邊中,留下部分未使用的部分。

如果應用程式版面配置無法根據明顯的顯示比例進行調整,您可以設定最大顯示比例,在所有 Android OS 層級明確強制執行上下黑邊。建議採用的比例為 2.4 (12:5)。應用程式在顯示比例大於指定比例的裝置上執行時,應用程式會加上黑邊。Wear OS 裝置的最低值必須為 1.0,其他裝置則至少為 1.33。如果您指定的比率低於這些限制,系統會根據上述的 OS 等級限制應用程式的顯示比例。

如要設定 Android 8.0 (API 級別 26) 及以上版本的顯示比例上限,請在 <activity> 標記中使用 android:maxAspectRatio 宣告最大比例。以下範例說明如何宣告最大顯示比例 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>

如果是 Android 7.1 以下版本,請在 <application> 元素中新增名為 android.max_aspect <meta-data> 元素,如下所示:

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

如要設定顯示比例上限,別忘了一併設定 android:resizeableActivity false。否則,最大長寬比不會產生任何影響。

宣告螢幕大小上限

即使應用程式尚未根據支援不同的螢幕大小進行全面最佳化,Android 仍可配合大螢幕擴充大多數應用程式。因此,您幾乎不必宣告螢幕大小上限。

如果您決定針對不同螢幕大小建立多個 APK,就無需將 APK 限制為僅限小螢幕裝置,因為針對大螢幕最佳化的 APK 應具有更大的 versionCode,因此 Google Play 一律會為具有大螢幕的裝置提供該 APK。

不過,如果您還是不滿意 Android 針對大螢幕調整應用程式大小的方式,可以在 <supports-screens> 資訊清單標記中指定 largestWidthLimitDp 屬性,停用超過特定寬度的大小。接著,Android 不會調整版面配置的大小,而是啟用螢幕相容性模式。該模式會依照應用程式支援的最大尺寸繪製版面配置,然後放大所有像素來填滿螢幕。

限制應用程式只發布到平板電腦或電視

您可以使用 <supports-screens> 資訊清單元素,防止手機裝置下載您的應用程式。

舉例來說,以下程式碼宣告只有大螢幕和超大型螢幕應安裝應用程式:

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

僅針對特定大小和密度限制應用程式

您可以使用 <compatible-screens> 資訊清單元素,定義應用程式支援的確切螢幕大小和密度。但強烈建議您避免使用這個方法,因為系統會將任何您「未指定」的大小和密度組合,視為與應用程式「不相容」的螢幕設定。因此,使用這個元素可讓您輕鬆封鎖應用程式,阻止應用程式實際支援的許多裝置。

<compatible-screens> 元素必須包含一或多個 <screen> 元素。每個 <screen> 元素均會使用 android:screenSizeandroid:screenDensity 屬性,指定與應用程式相容的螢幕設定。每個 <screen> 元素都必須包含這兩項屬性,才能指定個別螢幕設定。如果缺少任一屬性,元素就會無效 (Google Play 等外部服務會忽略該屬性)。

如果您的應用程式僅與小型和一般螢幕大小 (以及部分螢幕密度) 相容,資訊清單項目會如下所示:

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

凡是未在此明確宣告的大小和密度組合,都會受到限制,無法安裝應用程式。