大型螢幕食譜集

Stay organized with collections Save and categorize content based on your preferences.

Android 為五顆星大型螢幕應用程式提供所有食材。這份食譜集的食譜會挑選並結合自選食材,解決特定開發問題。每個食譜都包含最佳做法、品質佳的程式碼範例以及逐步教學,協助您成為大螢幕頂尖廚師。

星號評分

這些食譜是根據與「大型螢幕應用程式品質」指南的一致程度為星級評等。

五星級評等 符合等級 1 的標準,(與眾不同的大螢幕)
四星級評等 符合等級 2 的標準,(最佳化的大螢幕)
三星級評等 符合等級 3 的標準,(可使用的大螢幕)
二星級評等 可提供部分大螢幕功能,但不符合大螢幕應用程式的品質指南
一星級評等 符合特定用途的需求,但無法正常支援大螢幕

Chromebook 相機支援

三星級評等

在 Google Play 上吸引 Chromebook 使用者的目光。

如果您的相機應用程式只能使用基本的相機功能,請不要因為您無意中指定了高階手機上的進階相機功能,就讓應用程式商店阻止 Chromebook 使用者安裝該應用程式。

Chromebook 內建前置相機 (面向使用者),適合用於視訊會議、快照和其他應用程式。然而,並非所有 Chromebook 都有後置相機 (面向世界),而且 Chromebook 上多數面相使用者的相機都不支援自動對焦或閃光燈。

最佳做法

無論相機設定為何,多功能相機應用程式都能支援所有裝置,包括前置鏡頭、後置鏡頭、透過 USB 連接的外部相機。

如要確保應用程式商店盡可能向更多裝置提供您的應用程式,請一律宣告應用程式使用的所有相機功能,並明確指明是否需要這些功能。

食材

  • CAMERA 權限 - 允許應用程式存取裝置的相機
  • <uses-feature> 資訊清單元素 - 向應用程式商店告知應用程式使用的功能
  • required 屬性 — 向應用程式商店指出應用程式是否可在沒有指定功能的情況下運作

操作步驟

摘要

宣告 CAMERA 權限。宣告提供基本相機支援的相機功能。指定是否需要各項功能。

1. 宣告 CAMERA 權限

將下列權限新增至應用程式資訊清單:

<uses-permission android:name="android.permission.CAMERA" />
2. 宣告基本相機功能

將下列功能新增至應用程式資訊清單:

<uses-feature android:name="android.hardware.camera.any" android:required="false" />
<uses-feature android:name="android.hardware.camera" android:required="false" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
<uses-feature android:name="android.hardware.camera.flash" android:required="false" />
3. 指定是否需要各項功能

android.hardware.camera.any 功能設定 android:required="false",以允許具有任何類型的內建或外接相機或根本沒有相機的裝置存取您的應用程式。

至於其他功能,請設定 android:required="false",確保 Chromebook 等沒有後置鏡頭、自動對焦或閃光燈的裝置可在應用程式商店存取您的應用程式。

結果

Chromebook 使用者可以透過 Google Play 和其他應用程式商店下載及安裝您的應用程式。而具有完整相機功能的裝置 (例如手機) 的相機功能則不受此限制。

您明確設定應用程式支援的相機功能,並指定應用程式所需的功能,即可盡可能讓更多裝置體驗您的應用程式。

其他資源

詳情請參閱 <uses-feature> 說明文件中的「相機硬體功能」。

限制手機上應用程式的方向,而不限制大螢幕裝置的方向

二星級評等

您的應用程式在縱向模式作業出色,因此您已將應用程式設為僅限縱向。但您卻發現在橫向的大螢幕上,您可以做更多的事。

如何可同時擁有兩種模式?您是否可以限制應用程式在小螢幕上以縱向模式顯示,但啟用大螢幕的橫向模式?

最佳做法

最好的應用程式會尊重使用者的偏好,例如裝置的螢幕方向。

大螢幕應用程式品質」指南建議應用程式支援所有裝置設定,包括縱向和橫向模式、多視窗模式,以及可折疊式裝置折疊與展開的狀態。應用程式應針對不同的設定來最佳化版面配置和使用者介面,並且在設定變更時儲存及還原狀態。

這份食譜是暫時性措施 — 提供一些大螢幕支援。使用食譜,直到您改善應用程式,讓其支援所有裝置設定。

食材

操作步驟

摘要

在預設情況下,允許應用程式處理應用程式資訊清單中的方向變更。在執行階段中,決定應用程式視窗大小。如果應用程式視窗太小,請覆寫資訊清單方向設定,以限制應用程式的螢幕方向。

1. 指定應用程式資訊清單中的方向設定

將應用程式資訊清單的 screenOrientation 元素設為 fullUser。如果使用者尚未鎖定以感應器為基礎的旋轉方式,您的應用程式將支援所有的裝置螢幕方向。

<activity
    android:name=".MyActivity"
    android:screenOrientation="fullUser">

2. 決定螢幕大小

將資訊清單設定為支援所有使用者允許的方向後,您就可以根據螢幕尺寸,以程式輔助的方式指定應用程式方向。

使用 Jetpack WindowManager 程式庫的 WindowMetricsCalculator#computeMaximumWindowMetrics() 方法,以取得 WindowMetrics 物件的裝置螢幕大小。您可以將視窗指標與視窗大小類別進行比較,以決定限制方向的時機。

Windows 大小類別提供小螢幕與大螢幕之間的中斷點。一般手機的較小尺寸 (寬度或高度) 小於 600dp;平板電腦和大螢幕折疊式裝置的較小尺寸,則大於 600 dp。

使用中斷點 dp 值來判斷螢幕大小:

Kotlin

/** Determines whether the device has a compact screen. **/
fun compactScreen(): Boolean {
    val screenMetrics = WindowMetricsCalculator
                        .getOrCreate()
                        .computeMaximumWindowMetrics(this)
    val shortSide = min(screenMetrics.bounds.width(),
                        screenMetrics.bounds.height())
    return shortSide / resources.displayMetrics.density < 600
}

Java

/** Determines whether the device has a compact screen. **/
public boolean compactScreen() {
    WindowMetrics screenMetrics = WindowMetricsCalculator
                                  .getOrCreate()
                                  .computeMaximumWindowMetrics(this);
    int shortSide = Math.min(screenMetrics.getBounds().width(),
                             screenMetrics.getBounds().height());
    return shortSide / getResources().getDisplayMetrics().density < 600;
}
    注意:
  • 上述範例是以活動的方法導入;因此,活動在 computeMaximumWindowMetrics() 引數中會被解除參照為 this
  • 使用 computeMaximumWindowMetrics() 方法代替 computeCurrentWindowMetrics(),因為應用程式可以透過多視窗模式啟動,而忽略螢幕方向設定。除非應用程式視窗即為整個裝置畫面,否則您無法判定應用程式視窗大小及覆寫方向設定。

請參閱「WindowManager」的操作說明,瞭解如何宣告依附元件,以便在應用程式中提供 computeMaximumWindowMetrics() 方法。

3. 覆寫應用程式資訊清單設定

如果您確定裝置螢幕為小尺寸,可以呼叫 Activity#setRequestedOrientation() 以覆寫資訊清單的 screenOrientation 設定:

Kotlin

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    requestedOrientation = if (compactScreen())
        ActivityInfo.SCREEN_ORIENTATION_PORTRAIT else
        ActivityInfo.SCREEN_ORIENTATION_FULL_USER
    ...
}

Java

@Override
protected void onCreate(Bundle savedInstance) {
    super.onCreate(savedInstanceState);
    if (compactScreen()) {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
    } else {
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_FULL_USER);
    }
    ...
}

只要將邏輯新增至 onCreate() 方法中,即可在每次進行活動時取得螢幕大小並覆寫螢幕方向設定,例如在裝置旋轉,或當折疊式裝置折疊或展開後。

結果

現在即使裝置旋轉時,您的應用程式仍應在小螢幕上以縱向顯示。在大螢幕上,應用程式應支援橫向和縱向。

其他資源

如需升級應用程式以隨時支援所有裝置設定的說明,請參閱以下內容: