Android TV 的無障礙功能最佳做法

本指南介紹 Android TV 無障礙功能的最佳做法,並 原生及非原生應用程式的推薦機制

為什麼無障礙功能對我的 TV 應用程式如此重要?

視力障礙的情況在看電視的人口中並非常見。 全球預估 22 億人 視障者 加入世界衛生組織 (WHO)美國有 3, 200 萬名 18 歲以上的美國人 嚴重的視力喪失 的資料來源是 2018 年國家衛生訪談問卷調查。 歐洲的估計值 指向 3,000 萬 歐盟盲人 (EBU) 指出,某些盲人和部分視障人士。

最重要的是,視障使用者喜歡媒體內容 就和看完整部影片一樣Comcast 委託進行的 2017 年問卷調查 表示失明或低視能的使用者中,有 96% 會定期觀看 有 81% 的人每天看超過一小時。不過,剩下 65% 查詢電視上的內容時發生問題。2020 年的問卷調查 英國, 80% 的身心障礙者表示自己遇到視訊障礙 隨選影視串流服務

輔助技術雖然能夠協助低視能的使用者 讓無障礙體驗成為 TV 應用程式內容探索歷程的一大助力。 例如,特別注意提供導航指南和 為元素加上適當標籤,並確保 TV 應用程式可與無障礙功能搭配運作 像是 TalkBack這些步驟可大幅改善 協助視障使用者

想改善無障礙設計,第一步就是建立知名度。本指南可以 協助您和團隊成員找出 TV 應用程式的無障礙功能問題。

Android 無障礙資源

如要進一步瞭解 Android 裝置的無障礙功能,請參閱無障礙工具開發資源

文字比例

Android TV 應用程式應支援不同的像素密度,藉此尊重使用者調整文字大小的偏好。

請特別小心:

  • 針對 UI 元件中的維度使用 wrap_content
  • 確保版面配置隨著尺寸隨著文字比例而改變元件而重新安排元件。
  • 確保在較大的文字縮放中,元件仍能完整顯示在畫面上。
  • 對於無法彈性的元件,請勿使用 sp 文字大小單位。
  • 查看自訂檢視畫面中的 FONT_SCALE 值:

    // Checking font scale with Context
    val scale = resources.configuration.fontScale
    Log.d(TAG, "Text scale is: " + scale)
    

使用下列指令即可變更文字比例:

adb shell settings put system font_scale 1.2f

在 Android 12 以上版本中,使用者可以變更裝置的文字縮放設定 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目

鍵盤配置

在 Android 13 (API 級別 33) 以上版本中,您可以使用 getKeyCodeForKeyLocation()敬上 到 查詢按鍵碼 預期的重要位置 如果使用者已重新對應部分重要位置,或 所使用的鍵盤沒有一般配置。

口述影像

在 Android 13 (API 級別 33) 以上版本中,新增適用於整個系統的無障礙偏好設定 允許使用者在所有應用程式中啟用口述影像。Android TV 應用程式 檢查使用者的偏好設定 isAudioDescriptionRequested()

Kotlin


private lateinit var accessibilityManager: AccessibilityManager

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)

// Where your media player is initialized
if (am.isAudioDescriptionRequested) {
    // User has requested to enable audio descriptions
}

Java


private AccessibilityManager accessibilityManager;

// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager.class);

// Where your media player is initialized
if(accessibilityManager.isAudioDescriptionRequested()) {
    // User has requested to enable audio descriptions
}

使用者的偏好設定變更時,Android TV 應用程式可監控 新增事件監聽器至 AccessibilityManager:

Kotlin


private val listener =
    AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
        // Preference changed; reflect its state in your media player
    }

override fun onStart() {
    super.onStart()

    accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}

override fun onStop() {
    super.onStop()

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}

Java


private AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -> {
    // Preference changed; reflect its state in your media player
};

@Override
protected void onStart() {
    super.onStart();

    accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);
}

@Override
protected void onStop() {
    super.onStop();

    accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);
}