Android View

Vlastní contentDescription místo viditelného textu tlačítka (Android View)

Viditelný text tlačítka nemusí čtečce znít přirozeně — třeba počet v závorce („Všechny položky (42)") se přečte doslova jako „Všechny položky, otevírající závorka, 42, zavírající závorka". android:contentDescription umožňuje nahradit to, co TalkBack ohlásí, jiným textem, aniž by se muselo cokoli ručně skládat zpátky.

1. Špatně — spoléhat na výchozí přečtení viditelného textu

<Button
    android:id="@+id/btnAllItems"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Všechny položky (42)" />

TalkBack přečte přesně to, co je vidět, včetně závorek a čísla ve stejném tvaru, jako je napsané v textu tlačítka.

2. Správně — vlastní contentDescription

<Button
    android:id="@+id/btnAllItems"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="Všechny položky (42)"
    android:contentDescription="Všechny položky, 42 nepřečtených" />

Nebo v kódu, když se popisek mění za běhu podle stavu:

btnAllItems.contentDescription = if (unreadCount > 0) {
    "Všechny položky, $unreadCount nepřečtených"
} else {
    "Všechny položky, vše přečteno"
}

contentDescription nahrazuje jen to, co TalkBack o prvku řekne jako název — nic dalšího se neztrácí. Tlačítko zůstává tlačítkem (roli i akci kliknutí zajišťuje samotná třída Button), viditelný text android:text se dál zobrazuje sighted uživatelům beze změny. Nic se nemusí ručně doplňovat zpátky.

Proč to takhle je

  • contentDescription je čistě otázka jména, ne role ani akce — na rozdíl od přístupů, kde nahrazení sémantiky celého uzlu zahodí i roli a klikatelnost a je potřeba je ručně vrátit, tady Button svoji roli a klikatelnost poskytuje sám bez ohledu na to, jaké jméno má.
  • Přístupný popis a viditelný text se mohou lišit obsahem i formulací — nemusí to být to samé, jen jinak formátované. Přístupná verze může nést informaci navíc, kterou viditelný text vůbec neřeší (např. „vše přečteno" pro nulový počet).
  • Řešení funguje stejně pro jakýkoli View s viditelným textem, ne jen pro ButtonTextView, Chip, položky seznamu apod.

Pravidla

  • WCAG 4.1.2 (Název, role, hodnota) — přístupné jméno musí být programově zjistitelné a musí odpovídat účelu prvku, i když se liší od viditelného textu.

Zdroje

Štítky

Komentáře

Zatím zde nejsou žádné komentáře. Buďte první, kdo napíše svůj názor.

Přidat komentář k „Vlastní contentDescription místo viditelného textu tlačítka (Android View)“