本指南提供 Android TV 無障礙功能的最佳做法,並針對原生和非原生應用程式提出建議。
無障礙功能對我的電視應用程式有何重要性?
電視觀眾中,有視力障礙的人並不少見。世界衛生組織估計,全球有 22 億人有視力障礙,而美國約有 3, 200 萬名成人有明顯視力缺損 (2018 年全國健康訪問調查)。歐洲廣播聯盟 (EBU) 估計,歐洲有 3 千萬人受到影響。
視障使用者與一般使用者一樣,都能享受媒體內容。根據 Comcast 2017 年的調查,96% 的受訪者會觀看電視 (81% 每天觀看超過一小時)。但有 65% 的使用者表示找不到內容。此外,在英國調查中,有 80% 的身心障礙者表示遇到串流問題。
輔助技術可提供協助,但電視應用程式必須支援內容探索功能的無障礙設定。請特別留意導航指引和元素標籤。 確保與 TalkBack 等功能相容,大幅提升視障使用者的體驗。
改善無障礙程度的第一步是提高警覺。本指南可協助您和團隊找出電視應用程式的無障礙問題。
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);
}