Android View

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/ImageView nemá žádný text, ze kterého by TalkBack mohl přístupné jméno odvodit — contentDescription je jediný zdroj, null nebo 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.

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 „Popisek čistě grafického tlačítka pomocí contentDescription (Android View)“