このガイドでは、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); }