ピクセル密度の独立

ピクセル密度を独立させることの目的は、アプリケーションが異なる密度のスクリーンに表示された時にに、ユーザーから見たUI要素の物理的なサイズを維持する事です。ピクセル密度の独立はレイアウトと、画像(アイコン等)両方に適用されます。ピクセル密度独立を維持する事は重要です。何故なら、高さや幅がピクセルで定義されているボタン等のUIエレメントは密度の低いスクリーンでは大きく、密度の高いスクリーンでは小さく表示されてしまうからです。この様な密度に依存したサイズ変更はアプリケーションのレイアウト、ユーザビリティー、他のアプリケーションとの安定性に悪い影響を及ぼす可能性があります。

プラットフォームはデフォルトでピクセル密度の独立を提供します。これは以下の3つの方法によります。

  • 画像リソースの事前リサイズ(リソースのロード時にリサイズされます。)
  • レイアウトに使われるDensity-Independent-pixel(dip)値の自動リサイズ
  • アプリケーションで使われる絶対的なpixel値の自動リサイズ(マニフェストでandroid:anyDensity=”false”に設定されていて、必要な場合のみ)

以下のサンプルスクリーンはプラットフォームによって提供される、ピクセル密度の独立によって提供されています。レイアウトと、ランチャーアイコンがスクリーンサイズ、縦横比、ピクセル密度が異なるのに、同じ物理サイズで表示されている事に注目して下さい。

dip
図1.左からWVGA high密度、HVGA medium密度、QVGA low密度

殆どのケースで、単純に全てのレイアウトをピクセル密度独立pixel(dipもしくはdp)またはサイズ独立pixel(sipもしくはsp)で特定する様に気をつけるだけで、あなたのアプリケーションにおいてピクセル密度独立のメリットを享受できるでしょう。もし、あなたが絶対的なpixel値を使用していて、マニュフェストにandroid:anyDensity=”true”と設定している場合は、pixel値をリサイズする必要があります。詳しくはConverting from dips to pixelsを参照して下さい。

スクリーンサポートに関するマニュフェスト属性

android1.6は新しいマニュフェスト属性を導入しました。この属性は下表の通り、異なるクラスのスクリーンへのアプリケーションの表示をコントロールするのに使います。smallScreens,normalScreens,largeScreens属性が以前の掲載した、表の標準化スクリーンサイズに一致します。

supports-screens

一般に、スクリーンサイズ属性を”true”にした場合、プラットフォームに対して、アプリケーションが全てのスクリーンサイズにについて、プラットフォームのサイズ互換機能(バーチャルHVGA表示エリアなど)に頼らず、自らUIをコントロールすると通知した事になります。スクリーンサイズ属性を”false”に設定した場合、そのスクリーンサイズ向けに設計していないと通知した事になります。サポートしないスクリーンサイズによって効果は変わります。

  • largeScreen=”false”とした場合、largeScreenの端末にもインストールは可能です。largeScreenで実行しようとした時に、プラットフォームはそのアプリを互換モードで実行し、largeScreen上のnormalサイズ、medium密度エリアに描画されます。互換モードでの表示例はこちらを参照してください。
  • smallScreen=”false”とした場合もsmallScreenデバイスにインストールは可能です。しかし、アンドロイドマーケットでフィルタリングされて、smallScreenデバイス向けには表示されません。結果として、この設定をする事により、smallScreenデバイスへのインストールを防ぐ事ができます。

android:anyDensity=”true”とした場合、プラットフォームに対し、全てのピクセル密度に対し、実際のスクリーン寸法、pixelを使ってアプリケーションが自らコントロールすると通知した事になります。この場合、アプリケーションはUIのサイズ等をdipで定義する必要があり、全ての実際のpixel値等をandroid.util.DisplayMetrics.densityで得られる要素を使ってリサイズしなければなりません。

android:anyDensity属性はプラットフォームが行う、画像リソースの事前リサイズには適用されません。これは常にデフォルトで実行されます。

以下の例は、全ての密度でlarge,normal,smallのスクリーンをサポートすると定義したマニュフェストの例です。

<manifest xmlns:android="http://schemas.android.com/apk/res/android">

<supports-screens
android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:resizable="true"
android:anyDensity="true" />
</manifest>

属性のデフォルト値
<aupports-screens>のデフォルト属性値は、android:minSdkVersionによって異なります。もし定義されていればandroid:targetSdkVersionも同様です。

 

6 Responses to androidドキュメント和約「様々なスクリーンのサポートについて」その3

  1. […] androidドキュメント和約「様々なスクリーンのサポートについて」その3 […]

  2. […] androidドキュメント和約「様々なスクリーンのサポートについて」その3 […]

  3. […] androidドキュメント和約「様々なスクリーンのサポートについて」その3 […]

  4. […] androidドキュメント和約「様々なスクリーンのサポートについて」その3 […]

  5. Jane より:

    Liándose en la cafetería, ese manga que DIDI no quiere, ¿no? xDDDDDDDDDDDA mi me moló mucho la dedicatoria a Juanen con la noticia de Bleach xDDD La entrevista también estuvo muy bien :3 Y la torpeza de Didi tirando el redbull (OLE xDD)¡Un saludo!

  6. car insurance より:

    this dan obviously was over vaccinated as a child and has probably forgotten to take the other meds he may have been prescribed ! nothing a month in psych wouldn’t sort out !! he seems to have a little too much time on his hands . so much venom . if he wants to vaccinate his kids who cares ? I don’t !! a register for non vazers ?? Jesus .

コメントを残す

メールアドレスが公開されることはありません。