前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

Android 端末DPIの取得

お題

端末ごとにAPIから取得する画像サイズをするため、端末のDPIを取得したい。
なお対象は XHDPI , XXHDPI , XXXHDPI とする

対応

密度自体はDisplayMetrics.densityで取得できる。

val density = context.resources.displayMetrics.density;

こうすると 2.0f3.0f などのFloat値が返却され、デフォルトの160dpiを基準にして端末がその何倍かがわかる。 また densityDpi を使うと端末のDPIが分かる

val densityDpi = context.resources.displayMetrics.densityDpi;

ただし、このサイズは AndroidAPIレベルと共に増加し、DENSITY_260 から DENSITY_XXXHDPI(=640)まで10分割ほどに細分化されており、サーバー側のキャッシュヒット率などを考慮するとお題の通りの3つくらいに抑えたい。ということで丸めてしまうことにする

  //DPIを取得
  val densityDpi = context.resources.displayMetrics.densityDpi

  //近いDPIに寄せる(丸め)
  val density = when {
      densityDpi < DisplayMetrics.DENSITY_XXHIGH -> DisplayMetrics.DENSITY_XHIGH
      densityDpi < DisplayMetrics.DENSITY_XXXHIGH -> DisplayMetrics.DENSITY_XXHIGH
      else -> DENSITY_XXXHIGH
  }
  //スケールを得る
  val scale = density / DisplayMetrics.DENSITY_DEFAULT.toFloat()

参考

DisplayMetrics  |  Android Developers