Questa guida fornisce le best practice per l'accessibilità su Android TV e consigli per le app native e non native.
Perché l'accessibilità è importante per la mia app TV?
I problemi di vista non sono rari tra gli spettatori TV. L'OMS stima che 2,2 miliardi di persone in tutto il mondo abbiano problemi di vista, mentre circa 32 milioni di adulti statunitensi soffrono di una perdita significativa (National Health Interview Survey del 2018). In Europa, l'EBU stima che siano 30 milioni le persone interessate.
Gli utenti con disabilità visiva apprezzano i contenuti multimediali tanto quanto i loro coetanei vedenti. Un sondaggio di Comcast del 2017 ha rilevato che il 96% guarda la TV (l'81% per più di un'ora al giorno). Tuttavia, il 65% segnala problemi nel trovare i contenuti. Inoltre, l'80% delle persone con disabilità in un sondaggio nel Regno Unito ha segnalato problemi di streaming.
Le tecnologie assistive sono utili, ma le app TV devono supportare l'accessibilità nella scoperta dei contenuti. Presta particolare attenzione alle indicazioni di navigazione e alle etichette degli elementi. Assicurati la compatibilità con funzionalità come TalkBack per migliorare significativamente l'esperienza degli utenti con problemi di vista.
Il primo passo verso il miglioramento dell'accessibilità è la consapevolezza. Questa guida può aiutare te e il tuo team a scoprire i problemi di accessibilità della tua app TV.
Risorse per l'accessibilità di Android
Per saperne di più sull'accessibilità su Android, consulta le nostre risorse per lo sviluppo dell'accessibilità.
Ridimensionamento testo
Le app Android TV devono rispettare la preferenza dell'utente per il ridimensionamento del testo supportando diverse densità di pixel.
Presta particolare attenzione a:
- Utilizzare
wrap_contentper le dimensioni nei componenti dell'UI. - Assicurarsi che i layout riorganizzino i componenti man mano che le loro dimensioni cambiano a seconda della scala del testo.
- Assicurarsi che i componenti si adattino ancora allo schermo con scale di testo più grandi.
- Non utilizzare le unità di dimensioni del testo sp per i componenti non flessibili.
Controllare il valore di
FONT_SCALEper la regolazione nelle visualizzazioni personalizzate:// Checking font scale with Context val scale = resources.configuration.fontScale Log.d(TAG, "Text scale is: " + scale)
La scala del testo può essere modificata con il seguente comando:
adb shell settings put system font_scale 1.2f
Su Android 12 e versioni successive, gli utenti possono modificare il ridimensionamento del testo dalle impostazioni del dispositivo.
Layout tastiera
In Android 13 (livello API 33) e versioni successive, puoi utilizzare
getKeyCodeForKeyLocation()
per
cercare i codici chiave per le
posizioni delle chiavi previste.
Questa operazione potrebbe essere necessaria se l'utente ha rimappato alcune posizioni delle chiavi o se utilizza una tastiera con un layout non standard.
Descrizione audio
In Android 13 (livello API 33) e versioni successive, una nuova preferenza di accessibilità a livello di sistema consente agli utenti di attivare le descrizioni audio in tutte le app. Le app Android TV
possono controllare la preferenza dell'utente eseguendo una query con
isAudioDescriptionRequested().
Kotlin
private lateinit var accessibilityManager: AccessibilityManager
// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager::class.java)
// Where your media player is initialized
if (am.isAudioDescriptionRequested) {
// User has requested to enable audio descriptions
}
Java
private AccessibilityManager accessibilityManager;
// In onCreate():
accessibilityManager = getSystemService(AccessibilityManager.class);
// Where your media player is initialized
if(accessibilityManager.isAudioDescriptionRequested()) {
// User has requested to enable audio descriptions
}
Le app Android TV possono monitorare quando la preferenza di un utente cambia aggiungendo un listener a
AccessibilityManager:
Kotlin
private val listener =
AccessibilityManager.AudioDescriptionRequestedChangeListener { enabled ->
// Preference changed; reflect its state in your media player
}
override fun onStart() {
super.onStart()
accessibilityManager.addAudioDescriptionRequestedChangeListener(mainExecutor, listener)
}
override fun onStop() {
super.onStop()
accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener)
}
Java
private AccessibilityManager.AudioDescriptionRequestedChangeListener listener = enabled -> {
// Preference changed; reflect its state in your media player
};
@Override
protected void onStart() {
super.onStart();
accessibilityManager.addAudioDescriptionRequestedChangeListener(getMainExecutor(), listener);
}
@Override
protected void onStop() {
super.onStop();
accessibilityManager.removeAudioDescriptionRequestedChangeListener(listener);
}