このガイドでは、Android TV のアクセシビリティに関するベスト プラクティスと、ネイティブ アプリと非ネイティブ アプリの両方に関する推奨事項について説明します。
テレビアプリでユーザー補助が重要な理由
テレビ視聴者層では、視覚障がいのある人が少なくありません。世界保健機関(WHO)によると、世界中で約 22 億人が視覚障がいを抱えています。米国では、2018 年の国民健康インタビュー調査によると、18 歳以上の 3,200 万人が視力の大幅な低下を経験しています。欧州視覚障害者連合(EBU)によると、ヨーロッパでは 3,000 万人の視覚障がい者がいると推定されています。
最も重要なのは、視覚障がいのあるユーザーも、視覚障がいのないユーザーと同じようにメディア コンテンツを楽しんでいるということです。Comcast が委託した2017 年の調査によると、目の不自由なユーザーの 96% が定期的にテレビを視聴しており、81% が 1 日 1 時間以上視聴しています。しかし、65% のユーザーがテレビで何が放送されているかを確認する際に問題が発生したと報告しています。また、2020 年に英国で実施された調査では、障害者の 80% が、ビデオ オンデマンド ストリーミング サービスでアクセシビリティの問題を経験したと回答しています。
支援技術は視覚障がいのあるユーザーをサポートできますが、テレビアプリのコンテンツ検索ジャーニーでアクセシビリティをサポートすることも重要です。たとえば、ナビゲーション ガイダンスの提供や要素の適切なラベル付けに特に注意し、TV アプリが TalkBack などのユーザー補助機能で適切に動作するようにします。これらの手順を行うことで、視覚障がいのあるユーザーの利便性を大幅に向上させることができます。
ユーザー補助機能を改善するための最初のステップは、認識することです。このガイドは、お客様とお客様のチームがテレビアプリのアクセシビリティの問題を特定するのに役立ちます。
Android ユーザー補助機能のリソース
Android のユーザー補助機能について詳しくは、ユーザー補助機能の開発リソースをご覧ください。
テキストの拡大縮小
Android TV アプリは、さまざまなピクセル密度をサポートすることで、テキスト スケーリングに関するユーザーの設定を尊重する必要があります。
特に次の点に注意してください。
- UI コンポーネントのディメンションには
wrap_content
を使用します。 - テキストのスケールに応じて、レイアウトのサイズが変更されるとコンポーネントが再配置されるようにします。
- テキスト スケールを大きくしても、コンポーネントが画面に収まるようにします。
- 柔軟性のないコンポーネントには sp テキストサイズ単位を使用しないでください。
カスタムビューで
FONT_SCALE
の値を調整します。// Checking font scale with Context val scale = resources.configuration.fontScale Log.d(TAG, "Text scale is: " + scale)
テキストのスケールは、次のコマンドで変更できます。
adb shell settings put system font_scale 1.2f
Android 12 以降では、デバイスの設定からテキストの拡大 / 縮小を変更できます。
キーボード配列
Android 13(API レベル 33)以上では、getKeyCodeForKeyLocation()
を使用して、想定されるキーの場所のキーコードを検索できます。ユーザーがキーの場所を再マッピングしている場合や、一般的なレイアウトではないキーボードを使用している場合は、この操作が必要になることがあります。
音声による説明
Android 13(API レベル 33)以降では、システム規模の新しいユーザー補助設定により、ユーザーがすべてのアプリで音声による説明を有効にできるようになりました。Android TV アプリは、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 }
Android TV アプリは、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); }