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

本指南提供適用於 Android TV 無障礙功能的最佳做法,並提供原生和非原生應用程式的相關建議。

無障礙功能對我的 TV 應用程式為何重要?

在看電視的人口中,視力受損者並不常見。世界衛生組織 (WHO) 報告指出,全球預估有 22 億人患有視障。根據 2018 年美國國家健康訪問問卷調查,美國有 3,200 萬名 18 歲以上的美國人遭遇大量視力受損的現象。歐洲的預估值指向 3,000 萬名失明和部分視障人士。

最重要的是,視障使用者同樣能觀看媒體內容,就如同他們完全視著他們一樣。Comcast 委託 2017 年進行的問卷調查顯示,有 96% 的失明或低視能使用者經常會看電視,且每天觀看電視的時間超過 81%。但有 65% 的受訪者也回報 在查詢電視節目時會遇到問題在 2020 年,英國的問卷調查中,80% 的身心障礙者表示,在隨選影片串流服務方面遇到無障礙功能的問題。

雖然輔助技術可以協助低視能使用者,但對於 TV 應用程式內容探索歷程而言,輔助無障礙功能至關重要。舉例來說,請特別留意並提供導航指引、妥善加上標籤元素,並確保 TV 應用程式可與 TalkBack 等無障礙功能正常運作。這些步驟可以大幅改善視障使用者的體驗。

改善無障礙體驗的第一步,就是打響知名度。本指南可協助您和您的團隊找出 TV 應用程式的無障礙功能問題。

Android 無障礙資源

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

文字縮放

Android TV 應用程式應支援不同的像素密度,遵循使用者對文字縮放的偏好。

請特別留意下列事項:

  • 使用 wrap_content 做為 UI 元件中的尺寸。
  • 確保版面配置會重新排列元件,因為元件大小會因文字比例而改變。
  • 無論文字縮放比例,都必須確保元件仍能容納於螢幕上。
  • 如果元件無法彈性調整,請勿使用 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 應用程式可在 AccessbilityManager 中新增事件監聽器,監控使用者的偏好設定變更情形:

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);
}