Użytkownicy usług ułatwień dostępu, takich jak czytniki ekranu, korzystają z etykiet treści, aby poznać przeznaczenie elementów interfejsu.
Jeśli na przykład informacja jest przekazywana w formie elementu graficznego, etykieta treści może zawierać opis tekstowy znaczenia elementu lub powiązanego z nim działania.
Gdy elementy interfejsu użytkownika nie mają etykiet treści, niektórzy użytkownicy mogą mieć problemy ze zrozumieniem pokazywanych informacji lub z obsługą interfejsu.
Implementacja
ViewOkreślone typy elementów View
użyte w interfejsie powinny zawierać etykiety treści opisujące przeznaczenie danego elementu View
lub powiązane z nim działanie.
Jak umieścić etykiety treści
android:contentDescription
W przypadku użycia elementów ImageView
, ImageButton
, CheckBox
lub innego elementu View
przekazującego informacje w sposób graficzny skorzystaj z atrybutu android:contentDescription
, aby umieścić etykietę treści dla tego elementu View
.
Etykieta treści zależy czasami od informacji dostępnej tylko w czasie wykonywania lub znaczenie elementu View
może się z czasem zmienić. Na przykład podczas odtwarzania muzyki przycisk Odtwórz może zmienić się w przycisk Wstrzymaj. W takich przypadkach użyj metody View#setContentDescription(CharSequence contentDescription)
, aby zaktualizować etykietę treści w odpowiednim momencie.
Zazwyczaj, gdy usługa ułatwień dostępu opisuje element ViewGroup
, łączy etykiety treści jego podrzędnych elementów View
. Aby zastąpić to działanie i podać własną etykietę elementu oraz jego podrzędnych elementów View
bez możliwości wyboru, ustaw właściwość contentDescription
elementu ViewGroup
. Konieczne może być dołączenie etykiet treści z podrzędnych elementów View
w contentDescription
w przypadku ustawienia na poziomie ViewGroup
.
android:hint
W przypadku elementów EditTexts
lub edytowalnych TextViews
użyj atrybutu android:hint
, aby określić przeznaczenie pola tekstowego. Atrybut android:contentDescription
nie powinien być używany jako etykieta treści dla edytowalnych elementów View
.
android:labelFor
Użyj atrybutu android:labelFor
, by wskazać, że element View
powinien być traktowany jako etykieta treści innego elementu View
.
Kiedy etykieta treści jest niepotrzebna
W niektórych przypadkach nie trzeba podawać etykiety treści:
- Tekst wyświetlany w elemencie
TextView
(lub jego podklasach) jest automatycznie dostarczany usługom ułatwień dostępu. Dodatkowe etykiety treści zwykle są niepotrzebne. - Obrazy dekoracyjne lub nieprzedstawiające istotnych informacji w sposób graficzny nie wymagają etykiet treści. W takim przypadku ustaw atrybut
android:contentDescription
o wartości"@null"
lub atrybutandroid:importantForAccessibility
o wartości"no"
.
Aby dowiedzieć się więcej, przeczytaj o implementowaniu etykiet treści w Szkoleniu dla programistów na Androida i Przewodnikach po interfejsie API.
Określone typy elementów kompozycyjnych użytych w interfejsie powinny zawierać etykiety treści opisujące przeznaczenie danego elementu kompozycyjnego lub powiązane z nim działanie.
Jak umieścić etykiety treści
Opisy treści
Aby dodać etykietę treści do elementu Image
, Icon
lub innego elementu kompozycyjnego niskiego poziomu zawierającego informacje graficzne, ustaw opis treści.
- Etykieta treści może zależeć od czasu działania, a znaczenie elementu kompozycyjnego może ulec zmianie. Na przykład podczas odtwarzania muzyki przycisk Odtwórz może zmienić się w przycisk Wstrzymaj.
- W takich przypadkach użyj statusu, aby element kompozycyjny mógł obserwować zmiany w opisie treści i utworzyć go ponownie z nową wartością. Dowiedz się, jak korzystać ze State i Jetpack Compose.
- W niektórych przypadkach warto scalić elementy w jeden możliwy do zaznaczenia element, który łączy etykiety treści z ich elementów podrzędnych. Dowiedz się, jak scalić elementy.
Parametr label
Niektóre elementy kompozycyjne, takie jak TextField
, obsługują opcjonalny parametr label
. Gdy ten parametr jest skonfigurowany, element wyświetla element kompozycyjny przekazany do label
. Usługi ułatwień dostępu mogą być użyte do opisania elementu kompozycyjnego.
Kiedy etykieta treści jest niepotrzebna
W niektórych przypadkach nie należy dodawać etykiet treści:
- Tekst renderowany w
Text
lub innym elemencie kompozycyjnym zawierającymText
jest automatycznie przesyłany do usług ułatwień dostępu. - Obrazy dekoracyjne lub nieprzedstawiające istotnych informacji w sposób graficzny.
- W takim przypadku ustaw parametr
contentDescription
lub właściwośćModifier.semantics#contentDescription
nanull
albo wywołajModifier#clearAndSetSemantics
.
- W takim przypadku ustaw parametr
Projektowanie
Projektując interfejs użytkownika, zastanów się, jak treści graficzne powinny być oznaczone dla użytkowników usług ułatwień dostępu. Etykiety treści:
- Powinny być zwięzłe i jasno opisywać przeznaczenie elementu lub powiązane z nim działanie.
- Nie powinny zawierać typu lub stanu elementu.
- Jeśli z elementem jest powiązane działanie, powinny opisywać działanie, a nie graficzną reprezentację.
- Nie powinny stanowić instrukcji interakcji z elementem.
Aby dowiedzieć się więcej, przeczytaj wytyczne dotyczące pisania zgodnie z wymaganiami ułatwień dostępu w interfejsie Material Design.
Testowanie
Aby ręcznie sprawdzić, czy interfejs użytkownika zawiera wszystkie etykiety treści:
- Włącz TalkBack.
- Otwórz aplikację.
- Użyj gestów nawigacji liniowej i przenieś zaznaczenie na każdy element ekranu.
- Jeśli TalkBack przeniesie zaznaczenie do elementu, ale nie odczyta jego znaczenia lub wypowie komunikat „bez etykiety”, element może nie zawierać etykiety treści.
Automatyczne narzędzia testujące na Androidzie mogą wykrywać brakujące etykiety treści. Accessibility Scanner na Androida pozwala na ręczne przetestowanie aplikacji zainstalowanej na urządzeniu. Jeżeli chcesz przeprowadzać testy automatyczne, włącz sprawdzanie ułatwień dostępu w Espresso i Robolectric.