螢幕閱讀器等無障礙服務的使用者,必須仰賴內容標籤才能理解介面元素的含義。
在部分情況下 (例如於元素中以圖像方式傳達資訊時),內容標籤可提供文字說明,解釋元素的含義或相關聯的操作。
如果使用者介面中的元素沒有提供內容標籤,部分使用者可能會難以理解這些元素所傳達的資訊,或可透過介面執行哪些操作。
導入作業
查看在介面中使用特定類型的 View
時,就必須提供內容標籤,說明該 View
的用途或相關聯的操作。
如何提供內容標籤
android:contentDescription
使用 ImageView
、ImageButton
、CheckBox
或其他以圖像方式傳達資訊的 View
時,請使用 android:contentDescription
屬性為該 View
提供內容標籤。
內容標籤有時會取決於只在執行階段提供的資訊,View
的含義也可能隨著時間而變化。舉例來說,「播放」按鈕可能會在播放音樂時變成「暫停」按鈕。在這些情況下,請於適當的時機使用 View#setContentDescription(CharSequence contentDescription)
更新內容標籤。
無障礙服務說明 ViewGroup
時,通常會結合其子項 View
的內容標籤。如要覆寫這個行為,並指出你要自行替該項目及其無法聚焦的子項 View
提供說明,請在 ViewGroup
設定 contentDescription
。在 ViewGroup
設定 contentDescription
時,你可能需要在其中加入子項 View
的內容標籤。
android:hint
如為 EditTexts
或可編輯的 TextViews
,請使用 android:hint
屬性指出文字欄位的用途。請勿使用 android:contentDescription
做為可編輯的 View
的內容標籤。
android:labelFor
請使用 android:labelFor
屬性,指出這個 View
應做為另一個 View
的內容標籤。
不需要提供內容標籤的情況
在某些情況下,你不必特別提供內容標籤:
TextView
(或其子類別) 中顯示的文字會自動提供給無障礙服務,因此通常不必提供額外的內容標籤。- 裝飾用圖片或傳達無意義資訊的圖片,不需要內容標籤。在這種情況下,請將
android:contentDescription
屬性設為"@null"
,或是將android:importantForAccessibility
屬性設為"no"
。
詳情請參閱 Android 開發人員培訓文件和 API 指南,瞭解如何導入內容標籤。
在介面中使用特定類型的可組合函式時,就必須包含內容標籤,說明該可組合函式的用途或相關聯的操作。
如何提供內容標籤
內容說明
如要為 Image
、Icon
或傳達圖像資訊的其他低階層可組合函式提供內容標籤,請設定內容說明。
- 內容標籤可能會取決於執行階段資訊,可組合函式的含義也可能隨之變化。舉例來說,「播放」按鈕可能會在播放音樂時變成「暫停」按鈕。
- 這些情況下請使用狀態,使 Compose 可以觀察到內容說明已變更,進而使用新屬性值重新撰寫。瞭解如何使用狀態和 Jetpack Compose。
- 在部分情況下,你可能要將多個元素合併成單一可聚焦元素,從其子系元素合併內容標籤。瞭解如何合併元素。
標籤參數
部分可組合函式 (如 TextField
) 支援選填的 label
參數。設定標籤後,元素就會顯示傳遞至 label
的可組合函式。無障礙服務可以用於說明可組合函式。
不需要提供內容標籤的情況
在某些情況下,你不必提供內容標籤:
Text
中顯示的文字或包含Text
的其他可組合函式,會自動提供給無障礙服務。- 裝飾用圖片或傳達無意義資訊的圖片。
- 在這些情況下,請將
contentDescription
參數或Modifier.semantics#contentDescription
屬性設定為null
,或呼叫Modifier#clearAndSetSemantics
。
- 在這些情況下,請將
設計
設計使用者介面時,請仔細思考如何為以圖像方式呈現的內容設定標籤,方便無障礙服務的使用者輕鬆理解。內容標籤必須遵守下列原則:
- 簡潔明瞭,清楚說明元素的含義或相關聯的操作。
- 元素的內容標籤不得包含該元素的類型或狀態。
- 如果元素與某項操作相關聯,請說明該操作,而不是圖像的呈現方式。
- 請勿指示使用者以特定方式與元素互動。
詳情請參閱「Material Design 無障礙功能編寫指南」。
測試
如何手動檢驗應用程式的使用者介面未缺少內容標籤:
- 開啟 TalkBack。
- 開啟應用程式。
- 使用線性導覽手勢,將無障礙功能的焦點移至畫面上的各項元素。
- 如果 TalkBack 將焦點移到某些元素,但並未朗讀出該元素的含義,或是說出「未加上標籤」的訊息,表示該元素可能缺少內容標籤。
Android 的自動測試工具能偵測出缺少的內容標籤。你可以使用 Android 專用無障礙功能檢查工具,在裝置端手動測試應用程式。如要進行自動測試,請啟用 Espresso 和 Robolectric 中的無障礙程度檢查功能。