Android コード上でのdp<=>px変換


Androidにおいてdpとpxの変換を行うコードを紹介します。

Androidでレイアウトのパラメータ指定をコードで行いたい場合がどうしてもあります。
Androidのコードではピクセルが標準の単位です(ライブラリの引数や戻り値はピクセルで設計されているということ)が、複数の仕様の画面に適切に対応するためにはピクセル値でハードコーディングしてはいけません。コードでもdpで値を指定するべきです。

dpからpxに変換するには、端末の画面密度を取得して、その画面密度に応じた係数を用います。
DisplayMatrics.densityというフィールドがその係数になります。

このことをふまえて変換のコードは次のようになります。

public static int pxFromDp(float dp, Context context){
    float scale = context.getResources().getDisplayMetrics().density;
    return (int)(dp * scale + 0.5f);
}

最後に0.5fを足しているのは最も近い整数に切り上げるためです。

また、px値からdp値を求めるには上記の逆の計算を行うだけなので
次で求めることが出来ます。

public static float dpFromPx(float px, Context context){
    float scale = context.getResources().getDisplayMetrics().density;
    return (int)(px / scale + 0.5f);
}

以上です。

  • このエントリーをはてなブックマークに追加

PAGE TOP