サポートされるスクリーンの範囲
Android1.5以前のプラットフォームは単一のスクリーン設定(HVGA320×480解像度の3.2インチスクリーン)のみをサポートしていました。故に、アプリケーション開発者はそのスクリーンに特化したアプリケーションを書く事ができ、他のスクリーンで表示される事を心配する必要がありませんでした。
Android1.6以降は、多くの新しい形やサイズのデバイスが登場してきた事を受け、複数のサイズ、解像度へのサポートを追加しました。これによって、開発者はデバイスとスクリーンの範囲に、適切な表示をするように設計しなければならなくなりました。
アプリケーション開発者が複数デバイスに対応したUIを設計する手法を単純化する為、及び、既存のアプリケーションにインパクトを与える事無く、より多くの端末を受け入れる為、以下の通り、実際のスクリーンサイズ、解像度をいくつかの範囲に分類します。
- 3つの標準サイズ
- large
- nomal
- small
- 3つの標準ピクセル密度
- high(hdpi)
- medium(mdpi)
- low(ldpi)
アプリケーションは必要なら何れの標準サイズ向けにもカスタマイズしたリソース(主にレイアウト)を提供できます。また、ピクセル密度についても同様にそれぞれの標準ピクセル密度毎にリソース(主に画像)を提供できます。アプリケーションは端末のスクリーンの実際の物理的なサイズやピクセル密度を扱う必要はありません。実行時に、プラットフォームがデバイスの標準化されたサイズとピクセル密度に基づき、適切なサイズおよびピクセル密度のリソースのロードを実施し、それらを実際のスクリーンのピクセルマップに適合させます。
下表はいくつかの主要なサポートされているスクリーンをリストし、プラットフォームがそれらをどの様に標準化スクリーン設定にマッピングしているかを表しています。いくつかのデバイスは下表に掲載されていないスクリーンを使っています。(プラットフォームはそれらを同じ標準化スクリーン設定にマッピングします。)
上記の様に、様々なスクリーン設定が、nomalサイズでmedium密度の基本スクリーンを中心に配置されています。HVGAスクリーンが基本スクリーンとして使われています。何故なら、android1.5以前のアプリケーションはT-MobileやG1等に搭載されたHVGAスクリーン向けに書かれているからです。
プラットフォームは現在、表にある9種類のサイズ・密度設定をサポートしていますが、これら個々にカスタマイズしたリソースを作る必要はありません。プラットフォームは後述する堅牢な互換機能を提供しており、UIが適切に実装されていれば、あなたのアプリケーションをデバイスのスクリーンに描画する処理のほとんどをこの互換機能が扱います。
androidはどの様に複数スクリーンをサポートするのか
androidの複数スクリーンサポートの基本はビルトインされた互換機能で、実行されるデバイススクリーンに最適な方法によるアプリケーションリソース描画をまとめて管理します。プラットフォームはあなたのアプリケーションの描画処理のほとんどを扱いますが、同時に、どの様に表示させるかコントロールするキーとなる2つの方法を提供します。
- プラットフォームは必要に応じて、サイズ、ピクセル密度を特定したリソースを提供する為の、リソース識別子のセットをサポートします。特定サイズリソースの為の識別子はlarge、normal、smallで、特定ピクセル密度リソースの識別子はhdpi、mdpi、ldpiです。これらの識別子は上記表の標準化されたサイズ、ピクセル密度に一致します。
- プラットフォームは
マニフェスト要素も提供します。この要素の属性であるandroid:largeScreens、android:normalScreens、android:smallScreensによってあなたのアプリケーションがサポートする標準化スクリーンサイズを特定できます。4つ目の属性である、android:anyDensityによってビルトインの複数密度サポートを適用するかしないか、決める事が出来ます。
実行時に、プラットフォームはデバイスに表示可能な最適な表示を行う為に、3種類のサポートをあなたのアプリケーションに提供します。
- リソースの事前リサイズ(画像等)
スクリーンのピクセル密度に基づいて、プラットフォームはあなたのアプリケーションからサイズ、密度を指定されたリソースをロードし、リサイズせずに表示します。もし、適切なリソースが見つからなかった時は、プラットフォームがデフォルトのリソースをロードし、スクリーンの標準化ピクセル密度にマッチする様に拡大、もしくは縮小します。プラットフォームは特定ピクセル密度ディレクトリからロードされたものでない限り、デフォルトリソースが基本密度であるmedium(160)向けに設計されたものとみなします。
例えば、スクリーンの密度がhighの場合、プラットフォームは識別子hdpiでタグ付けされたリソースをロードし、それらをリサイズせずに使用します。もし、その様なリソースが見つからなかった場合、プラットフォームは代わりにデフォルトリソースを使用し、基本密度(medium)からhighにリサイズします。サイズ、密度特定リソースの作り方について、更に詳しくはResource qualifiersを参照して下さい。
- ピクセル縦横サイズ、座標の自動調整
アプリケーションが複数のスクリーンピクセル密度をサポートしていない場合、プラットフォームはアプリケーション内で使われている、全ての絶対座標、寸法、およびその他のピクセル数値(パディングやマージン等)を自動的に調整します。これはピクセルで定義されたスクリーン要素が基本密度(medium(160))で表示された時とほぼ同じ物理サイズで表示される様にする為です。プラットフォームはこのリサイズを裏で行い、また、物理ピクセルサイズに加え、リサイズされた全てのピクセルサイズをアプリケーションに報告します。詳しくは、Manifest attributes for screens supportのandroid:anyDensity属性項目を参照して下さい。
- 大きなスクリーン向けの互換モード
デバイスのスクリーンサイズがあなたのアプリケーションがサポートするサイズよりも大きい場合(Manufestの要素に基づく)、プラットフォームはアプリケーションを基本サイズ、基本密度で表示します。標準サイズよりも大きいスクリーンに対しては、黒背景上に基本サイズで表示します。 例えば、largeに分類される、WVGAのmedium密度のスクリーンだが、アプリケーションはlargeスクリーンをサポートしていないケース。この場合、アプリケーションがスクリーンサイズを問い合わせた時にシステムが、320×480だと偽って報告します。アプリケーションをリサイズする代わりに、アプリケーションの320×480インターフェースが、切手の様に480×800のlargeスクリーン上に配置されるわけです。
詳しくは、Manifest attributes for screens supportのandroid:anyDensity属性項目及び、Screen-Compatibility Examplesを参照して下さい。
一般的に、これらの互換機能は、全てのアプリケーション(android1.5以前向けを含む)が殆どのデバイスで適切に表示出来る事を可能にします。特に、デバイスのスクリーンが基本サイズより大きい場合は。
しかし、基本スクリーン向けに書かれたアプリケーションはQVGA等の小さなスクリーンに適切に表示させるためには多少の調整が必要である事を覚えておいてください。小さなスクリーンはスクリーンエリアが削減される為、デザイン、コンテンツ、機能が犠牲になる事を考える必要があります。
詳しくは、Strategies for Legacy Applicationsを参照して下さい。
androidドキュメント和約「様々なスクリーンのサポートについて」その1
androidドキュメント和約「様々なスクリーンのサポートについて」その2
androidドキュメント和約「様々なスクリーンのサポートについて」その3
androidドキュメント和約「様々なスクリーンのサポートについて」その4
androidドキュメント和約「様々なスクリーンのサポートについて」その5
androidドキュメント和約「様々なスクリーンのサポートについて」その6
androidドキュメント和約「様々なスクリーンのサポートについて」その7
androidドキュメント和約「様々なスクリーンのサポートについて」その8
[…] androidドキュメント和約「様々なスクリーンのサポートについて」その2 […]