px⇔dp⇔spを動的に変換する方法 | Andoidアプリ開発

Androidアプリ開発で動的にViewのサイズや位置などを変更するときに、
引数の単位がpxになっていることがあります。

しかしながら、単純にpxの単位で指定してしまっては、
デバイスの実画面サイズやdpiに依存することになり、
ユーザのそれぞれのデバイスで同じように表示させることができなくなってしまいます。

以下の記事で紹介したように、それぞれのデバイスで同じように表示させるにはdpやspの単位を使用する必要があります
なので、この記事ではpx⇔dp⇔spを動的に変換する方法を紹介します。
スポンサーリンク

px⇔dpの変換方法

このセクションではpx⇔dpの変換方法を紹介します。

以下の記事で紹介したようにdpの定義は160 dpiデバイスのときに1 px = 1 dpとなり、dpiが変わると相対的に変化します。 よって、アプリが動作しているデバイスのdpiが160 dpiに対して何倍か?を知ればpx⇔dpを変換することができます。

アプリが動作しているデバイスのdpiが160 dpiに対して何倍か?は以下のコードで取得することができます。
context.getResources().getDisplayMetrics().density

よって、dp→pxの変換は以下のようになります。
public float converDpToPx(float dp) {
    return dp * context.getResources().getDisplayMetrics().density;
}
逆にpx→dpの変換は以下のようになります。
public float converPxToTo(float px) {
    return px / context.getResources().getDisplayMetrics().density;
}
スポンサーリンク

px⇔spの変換方法

px⇔spの変換についても同様にデバイスのスケールを表すオブジェクトが用意されています。
具体的には以下です。
context.getResources().getDisplayMetrics().scaledDensity

よって、sp→pxの変換は以下のようになります。
public float converSpToPx(float sp) {
    return sp * context.getResources().getDisplayMetrics().scaleDensity;
}
逆にpx→spの変換は以下のようになります。
public float converPxToSp(float px) {
    return px / context.getResources().getDisplayMetrics().scaleDensity;
}
スポンサーリンク

dp⇔spの変換方法

dp⇔spの変換方法については、ここまでのpx⇔dpの変換方法とpx⇔spの変換方法を組み合わせることで実現させることができます。
スポンサーリンク

まとめ

この記事ではAndoridアプリ開発においてpx⇔dp⇔spを動的に変換する方法を紹介しました。

相対的単位を上手に利用することでユーザのデバイスサイズに依存しない優れたUIをデザインしましょう!
Androidアプリ開発
スポンサーリンク
Androidアプリ開発 記事一覧
Androidアプリ開発 記事一覧
Androidアプリ開発の記事一覧を以下にまとめています。
良かったらご覧ください。

Androidアプリ開発 記事一覧
カテゴリ広告: Androidアプリ開発
スポンサーリンク: Androidアプリ開発を個人レッスンで学ぶなら...?
Androidアプリ開発は一人で学んでいても限界があります。
そこでオススメなのがオンラインでAndroidアプリ開発を学べる「コードキャンプ」。
個人レッスンで丁寧に教えてくれます。

無料レッスン体験も可能なので、まずは無料体験から試してみてはいかがでしょうか?

Androidアプリ開発個人レッスン
一般広告: モバイルバッテリー
スポンサーリンク
Aresei-note
タイトルとURLをコピーしました