2013年 12月 03日 ( 1 )

そういえば前回、「xxhdpiが480dpiまで、xxxhdpiが640dpiまで」と当然のように書いていましたが、これはandroid SDKのソースをもとに、判断しています。
というわけで、android SDKのソースを落として、該当部分を見てみましょう。

1. androidSDKのソースを取得する
androidSDKマネージャを使って、最新ソースを落としましょう。

d0252816_23452516.png


インストールが完了すると、android-sdkの入っているフォルダに

android-sdks/sources/android-19/


というものができています。
19の部分は、先ほど選んだAPIレベルの値です。
この下に、SDKのソースが一式入っています。

さて肝心のdpiに関するソースですが

android/util/DisplayMetrics.java


このファイルに、DPI関連の定数が記載されています。

/**
* Standard quantized DPI for extra-extra-high-density screens. Applications
* should not generally worry about this density; relying on XHIGH graphics
* being scaled up to it should be sufficient for almost all cases.
*/
public static final int DENSITY_XXHIGH = 480;

こちらがxxhdpiの判定に使っている、定数のようです。
コメントの部分は要訳(意訳)すると、
「あんまり気にしなくていいよ。世の中の端末はxhdpi以下で作っちゃえばほとんど対応するからさ。」
と書いてあるようです。もう日本国内では、冬モデルのほぼ全てがxxhdpi端末なんですけどね……。

/**
* Standard quantized DPI for extra-extra-extra-high-density screens. Applications
* should not generally worry about this density; relying on XHIGH graphics
* being scaled up to it should be sufficient for almost all cases. A typical
* use of this density would be 4K television screens -- 3840x2160, which
* is 2x a traditional HD 1920x1080 screen which runs at DENSITY_XHIGH.
*/
public static final int DENSITY_XXXHIGH = 640;

xxxhdpiの定数にも、何かコメントがあります。
要訳(意訳)すると
「これ、4Kテレビ用だから」
と書いてあるようです。もう2Kハンドセット端末が出ちゃうんですが……。

そんなわけで、コメントを見る限り、android側は若干解像度まわりの事情にはのんきなようですね。

ちなみに、この定数を使っているソースは
android/app/ActivityManager.java
com/android/server/display/OverlayDisplayAdapter.java

こちらの2ファイルのようです。余裕があるときに、こちらの処理も覗いてみるといいでしょう。

というわけで、今後もAPIが追加されたときには公式の差分表だけでなく、こうしてSDKソースを直接見るのもありではないでしょうか。
差分表だけだと見逃すこともありますからね。
[PR]