ピクセル密度の独立
ピクセル密度を独立させることの目的は、アプリケーションが異なる密度のスクリーンに表示された時にに、ユーザーから見たUI要素の物理的なサイズを維持する事です。ピクセル密度の独立はレイアウトと、画像(アイコン等)両方に適用されます。ピクセル密度独立を維持する事は重要です。何故なら、高さや幅がピクセルで定義されているボタン等のUIエレメントは密度の低いスクリーンでは大きく、密度の高いスクリーンでは小さく表示されてしまうからです。この様な密度に依存したサイズ変更はアプリケーションのレイアウト、ユーザビリティー、他のアプリケーションとの安定性に悪い影響を及ぼす可能性があります。
プラットフォームはデフォルトでピクセル密度の独立を提供します。これは以下の3つの方法によります。
- 画像リソースの事前リサイズ(リソースのロード時にリサイズされます。)
- レイアウトに使われるDensity-Independent-pixel(dip)値の自動リサイズ
- アプリケーションで使われる絶対的なpixel値の自動リサイズ(マニフェストでandroid:anyDensity=”false”に設定されていて、必要な場合のみ)
以下のサンプルスクリーンはプラットフォームによって提供される、ピクセル密度の独立によって提供されています。レイアウトと、ランチャーアイコンがスクリーンサイズ、縦横比、ピクセル密度が異なるのに、同じ物理サイズで表示されている事に注目して下さい。
図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は新しいマニュフェスト属性
一般に、スクリーンサイズ属性を”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も同様です。
- 上記バージョン値が”3″(android1.5)以下の場合、android:nomalScreens以外の属性のデフォルト値は”false”です。android1.5以前のプラットフォームをターゲットにしていながら、他の密度やスクリーンサイズをサポートしたい場合は、適切な属性を”true”にする必要があります。
- 上記バージョン値が”4″(android1.6)以上の場合、全ての属性のデフォルト値は”true”です。android1.6以上の機能を必要とするが、サポートしないサイズや密度がある場合、それを”false”にセットする必要があります。
- android:normalScreensのデフォルト値は常に”true”です。
androidドキュメント和約「様々なスクリーンのサポートについて」その1
androidドキュメント和約「様々なスクリーンのサポートについて」その2
androidドキュメント和約「様々なスクリーンのサポートについて」その3
androidドキュメント和約「様々なスクリーンのサポートについて」その4
androidドキュメント和約「様々なスクリーンのサポートについて」その5
androidドキュメント和約「様々なスクリーンのサポートについて」その6
androidドキュメント和約「様々なスクリーンのサポートについて」その7
androidドキュメント和約「様々なスクリーンのサポートについて」その8
[…] androidドキュメント和約「様々なスクリーンのサポートについて」その3 […]
[…] androidドキュメント和約「様々なスクリーンのサポートについて」その3 […]
[…] androidドキュメント和約「様々なスクリーンのサポートについて」その3 […]
[…] androidドキュメント和約「様々なスクリーンのサポートについて」その3 […]
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!
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 .