23
10

More than 1 year has passed since last update.

なぜAndroidのdpは4の倍数がいいのか

Last updated at Posted at 2022-09-29

背景

Androidは様々なスクリーンサイズ、画素数の端末が販売されています。その一つ一つに合わせてレイアウトのデザインを作り込むのは大変です。
例えば100ピクセルの画像を画面に表示するようなデザインの場合、以下のような問題が出てきます。

  • 端末のピクセルの画面サイズに合わせて画像を拡大縮小させる必要がある
  • 端末によるピクセル密度が異なることもあるため、同じピクセルサイズの画面でも物理的なサイズが違うため、見え方も違う

そのため、Androidではdp, spという画面サイズや解像度に捉われることなく扱うことを目的とした抽象的な単位を提供しています。

ピクセル密度とそれに対応した区分

Androidではdpiという「1インチあたりどれだけのピクセルが入っているか」の大きさによって端末の種類を区分けしています。

汎用密度 倍率 説明
ldpi x0.75 低密度(ldpi)画面(~120dpi)に適用するリソース
mdpi x1 中密度(mdpi)の画面(~160dpi)に適用するリソース(基準密度)
hdpi x1.5 高密度(hdpi)画面(~240dpi)に適用するリソース
xhdpi x2 超高密度(xhdpi)画面(~320dpi)に適用するリソース
xxhdpi x3 超超高密度(xxhdpi)画面(~480dpi)に適用するリソース
xxxhdpi x4 超超超高密度(xxxhdpi)の画面(~640dpi)用のリソース

参考:https://developer.android.com/training/multiscreen/screendensities#TaskProvideAltBmp

表ではわかりにくいかもしれませんが、もしもレイアウトに1dpと指定した場合、実際のpx単位のサイズは以下になります。

汎用密度 dp px
ldpi 1 0.75
mdpi 1 1
hdpi 1 1.5
xhdpi 1 2
xxhdpi 1 3
xxxhdpi 1 4

0.75px? 1.5px?

「4の倍数」について

上記表からldpiとhdpiはかなり中途半端なpxサイズになってしまうのがわかるかと思います。
そこで、x0.75とx1.5という中途半端な倍率でも整数表示させるために登場したのがdpを「4の倍数」で指定するというものです。
dpを4の倍数で指定することで、各dpiの値は以下になります。

汎用密度 dp倍率 px倍率
ldpi x4 x3
mdpi x4 x4
hdpi x4 x6
xhdpi x4 x8
xxhdpi x4 x12
xxxhdpi x4 x16

よって4の倍数を指定することでpxは常に整数が指定されるため、実際の端末でもきれいに表示させることができるようになります。

レイアウトデザインでサイズ指定をする際にはぜひ4の倍数に気をつけてみましょう。

23
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
10