ディスプレイとレイアウト
Fire TVデバイスでは、デバイスの画面密度に応じて、1080pまたは720pのUIキャンバスにアプリのUIがレンダリングされます。テレビでうまくレンダリングするには、レイアウトで画面の解像度、密度、密度に依存しないピクセル(dp)を考慮する必要があります。
このドキュメントでは、Amazon Fire TVデバイス向けのUIレイアウトを構築するための技術情報を説明します。TVデザインに関するガイドライン全般については、デザインとユーザーエクスペリエンス(UX)に関するガイドラインを参照してください。
画面サイズと解像度
Fireタブレットなど、多くのAndroidデバイスでは画面サイズが固定されており、解像度も1種類だけです。一方、Amazon Fire TVデバイスでは任意のサイズの画面に接続して、720pまたは1080pの解像度を利用することができます。
レイアウトをどの解像度でも同じサイズに保つには、サイズをピクセルではなくdp単位で指定します。
次の表は、Fire TVデバイスの各UIキャンバスのサイズ、画面密度、ディスプレイ解像度(dp単位)を示しています。
| UIキャンバス | キャンバスサイズ(ピクセル) | 密度識別子 | ディスプレイ解像度(dp) | 画面サイズ識別子 |
|---|---|---|---|---|
| 1080p | 1920 x 1080 | xhdpi(320) |
960 x 540 | large |
| 720p | 1280 x 720 | tvdpi(213) |
~960 x 540 | large |
デバイスがUIキャンバスを設定します。これは、アプリのUIがレンダリングされるサーフェスです。UIキャンバスは、接続されているテレビの出力解像度と異なる場合があります。Android は各キャンバスの密度に合わせてdp単位をスケーリングするため、各キャンバスの表示解像度は約 960 x 540 dp です。dpでレイアウトを作成すると、すべてのFire TVデバイスで同じようにレンダリングされ、デバイスごとに変更する必要はありません。
ディスプレイの向き
Amazon Fire TVデバイスのディスプレイは、横向きに固定されています。デバイスに回転または向きの変更を求めるリクエストに対しては、次の結果が返されます。
| メソッド | 結果 |
|---|---|
Display.getRotation() |
0 (ROTATION_0) |
Display.getOrientation()(廃止) |
0 (ORIENTATION_UNDEFINED) |
リソース構成
Amazon Fire TV以外のデバイス(タブレットなど)で動作するアプリを設計する場合は、デバイスの種類ごとに異なるレイアウトとドローアブルを作成し、さまざまなデバイス構成に対応する名前が付けられたres/のサブディレクトリに保存できます。これらのリソース構成の使用方法について詳しくは、Android 画面の互換性の概要をご覧ください。
次の表では、Amazon Fire TVデバイスで利用可能なリソース構成について説明します。
| 構成 | 値 |
|---|---|
| 最小幅 | sw540dp |
| 使用可能な幅 | w960dp |
| 使用可能な高さ | h540dp |
| 画面サイズ | large |
| 画面縦横比 | long |
| 画面の向き | land(TVアプリは常に横向きです) |
| UIモード | television |
| ナイトモード | notnight |
| 画面のピクセル密度 | xhdpi(1080p UIキャンバス)またはtvdpi(720p UIキャンバス) |
| タッチスクリーンタイプ | notouch |
| キーボードの使用可否 | keyssoft |
| プライマリテキスト入力メソッド | nokeys |
| ナビゲーションキーの使用可否 | navexposed |
| プライマリノンタッチナビゲーションメソッド | dpad |
| プラットフォームバージョン | v17 |
レイアウトのベストプラクティス
アプリがすべてのUIキャンバスで正しくレンダリングされるように、次の方法に従ってください。
- UIのサイズをpxではなくdpで設定します。 1920 x 1080などのピクセル値をレイアウトやコードにハードコーディングしないでください。
- ウィンドウから画面サイズを取得します。
WindowMetrics(APIレベル30以上)、Resources.getDisplayMetrics()、またはConfigurationを使用してください。UIキャンバスではなくTVパネルの解像度を報告するDisplay.Modeは使用しないでください。 - レイアウトやアセットを密度の閾値で調整しないでください。 たとえば、
densityDpi >= 320というチェックはtvdpiキャンバスでは失敗します。代わりにリソース修飾子またはdpベースのサイズを使用してください。 - 表示されたサイズで画像をリクエストしてデコードします。 現在の密度(dp ×
DisplayMetrics.density)からピクセルサイズを計算し、フォーカスに適用されたズームを含めます。固定の1080pピクセルサイズの画像をリクエストしないでください。
次の例では、ウィンドウからUIキャンバスサイズを読み取り、画像リクエスト用のdpサイズをピクセルに変換します:
import kotlin.math.roundToInt
// UIキャンバスサイズをDisplay.Mode からではなく、ウィンドウから読み取ります。
val metrics = resources.displayMetrics
val canvasWidthPx = metrics.widthPixels // xhdpiでは1920、tvdpiでは1280
val canvasHeightPx = metrics.heightPixels // xhdpiでは1080、tvdpiでは720
//現在の密度のdpサイズをピクセルに変換します。
fun dpToPx(dp: Float): Int = (dp * resources.displayMetrics.density).roundToInt()
//ピントが合うと1.1倍にズームする、幅200dpのポスターのサイズ。
val posterWidthPx = dpToPx(200f * 1.1f) // xhdpiでは440、tvdpiでは293
関連トピック
Last updated: 2026年10月30日

