Popisek čistě grafického tlačítka pomocí contentDescription (Android View)
Tlačítko s jedinou ikonou a bez viditelného textu nemá žádný výchozí přístupný název — obrázek sám o sobě žádný text nenese. Bez contentDescription TalkBack ohlásí jen holé „tlačítko", bez náznaku, k čemu slouží.
1. Špatně — ikona bez popisku
<ImageButton
android:id="@+id/btnRefresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_refresh"
android:background="?attr/selectableItemBackgroundBorderless" />
Vizuálně jasné (ikona aktualizace), ale bez contentDescription je to pro TalkBack tlačítko bez jména. Lint v Android Studiu tohle přímo hlásí jako chybu (kontrola ContentDescription).
2. Správně — contentDescription přímo na ImageButton
<ImageButton
android:id="@+id/btnRefresh"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_refresh"
android:contentDescription="@string/refresh"
android:background="?attr/selectableItemBackgroundBorderless" />
ImageButton je potomek ImageView, který roli i akci kliknutí zajišťuje sám — contentDescription je jediná věc, kterou je potřeba přidat.
3. Když se ikona i popisek mění podle stavu
Tlačítko pro synchronizaci, kde se ikona za běhu mění na indikátor průběhu, potřebuje popisek aktualizovat v kódu spolu se změnou obsahu:
if (isRefreshing) {
btnRefresh.contentDescription = getString(R.string.sync_in_progress)
} else {
btnRefresh.contentDescription = getString(R.string.sync)
}
Proč to takhle je
ImageButton/ImageViewnemá žádný text, ze kterého by TalkBack mohl přístupné jméno odvodit —contentDescriptionje jediný zdroj,nullnebo chybějící hodnota znamená úplně bezejmenné tlačítko.- Roli tlačítka a akci kliknutí zajišťuje samotná třída
ImageButton,contentDescriptionřeší výhradně jméno — nic dalšího není potřeba ručně doplňovat. - Mění-li se ikona podle stavu, musí se spolu s ní měnit i popisek — jinak zůstane ohlašovat starý, už neplatný stav.
Pravidla
- WCAG 4.1.2 (Název, role, hodnota) — i čistě grafické tlačítko musí mít programově zjistitelné jméno, ne jen vizuální ikonu.
Komentáře
Zatím zde nejsou žádné komentáře. Buďte první, kdo napíše svůj názor.
Přidat komentář k „Popisek čistě grafického tlačítka pomocí contentDescription (Android View)“