3android "px"、 "dip"、 "dp"、 "sp"の違いは何ですか?



15 Answers

これに関する多くのこと、サイズや密度の異なる複数の画面を最適にサポートする方法については、ここで詳しく説明しています。

画面サイズ
スクリーンの対角線として測定された実際の物理的なサイズ。 簡単にするため、Androidはすべての実際の画面サイズを4つの一般化されたサイズ(小、標準、大、超)にグループ化します。

スクリーン密度
画面の物理領域内のピクセル数。 通常はdpi(dots per inch)と呼ばれます。 例えば、「低」濃度スクリーンは、「通常」または「高」濃度スクリーンと比較して、所与の物理的エリア内のピクセル数がより少ない。 簡単にするために、Androidはすべての実際の画面密度を低、中、高、超高、超超高、超超超高の6つの一般化された密度にグループ化します。

オリエンテーション
ユーザーの視点から見た画面の向き。 これは横長または縦長のいずれかです。つまり、画面のアスペクト比はそれぞれワイドまたは高です。 異なるデバイスがデフォルトで異なる方向で動作するだけでなく、ユーザーがデバイスを回転させるときに実行時に向きが変わる可能性があることに注意してください。

解決
画面上の物理ピクセルの合計数。 複数の画面のサポートを追加する場合、アプリケーションは解像度で直接動作しません。 アプリケーションは、一般的なサイズと密度のグループで指定されているように、画面のサイズと密度にのみ関係する必要があります。

密度非依存ピクセル(dp)
UIレイアウトを定義するときに使用する仮想ピクセル単位で、レイアウトの寸法を表現したり、密度に依存しない方法で配置することができます。 密度に依存しないピクセルは、160dpiの画面上の1つの物理ピクセルに相当します。これは、「中」の密度の画面でシステムが想定しているベースラインの密度です。 実行時に、システムは使用中の画面の実際の密度に基づいて、必要に応じてdpユニットのスケーリングを透過的に処理します。 dp単位の画面ピクセルへの変換は簡単です: px = dp * (dpi / 160) 。 例えば、240dpiのスクリーンでは、1dpは1.5物理ピクセルに等しい。 アプリケーションのUIを定義するときには、dp単位を常に使用して、異なる密度の画面にUIが正しく表示されるようにする必要があります。

複数のタイプのデバイス用にAndroidアプリを開発することについて真剣に取り組んでいる場合は、画面サポート開発ドキュメントを少なくとも1回は読んでおく必要があります。 それに加えて、特定の画面構成を持つアクティブなデバイスの実際の数を知ることは、常に良いことです。

css dp vs px

アンドロイド測定単位の違いは何ですか?

  • px
  • 浸漬
  • dp
  • sp



pxピクセル - スケール単位のポイントは、画面上の実際のピクセルに対応します。

スクリーンの物理的なサイズに基づいてインチで表示されます。

mmミリメートル - 画面の物理的なサイズに基づいています。

ptポイント - 画面の物理的なサイズに基づいて1/72インチ。

dp密度に依存しないピクセル - 画面の物理密度に基づく抽象的な単位。 これらの単位は160 dpiの画面を基準にしているため、1 dpは160 dpiの画面上の1ピクセルです。 dpとピクセルの比率は画面の密度に応じて変化しますが、必ずしも正比例ではありません。 注意:コンパイラはdipdp両方を受け入れますが、 dpsp一貫しています。

sp - スケールに依存しないピクセル - これはdp単位と似ていますが、ユーザーのフォントサイズの優先順位によっても調整されます。 フォントサイズを指定するときは、本機を使用することをお勧めします。そのため、画面の密度とユーザーの好みの両方で調整されます。

同じサイズの2つのスクリーンの例を考えてみましょう.1つは画面密度が160 dpi(1インチあたりのドット数、つまり1インチあたりのピクセル数)で、もう1つは240 dpiです。

                          Lower resolution   screen          Higher resolution, same size
Physical Width                      1.5 inches                        1.5 inches
Dots Per Inch (“dpi”)               160                               240
Pixels (=width*dpi)                 240                               360
Density (factor of baseline 160)    1.0                               1.5

Density-independent Pixels          240                               240
(“dip” or “dp” or “dps”)

Scale-independent pixels 
 (“sip” or “sp”)                  Depends on user font size settings    same



dpdipです。 すべてに使用します(マージン、パディングなど)。

{text-size}にのみspを使用してください。

さまざまな画面の密度で同じサイズを得るために、Androidは実行時にこれらの単位をピクセルに変換するので、あなたにとっては厄介な数学はありません。

さまざまな画面サイズでpxdpspの違いを見てください。

出典: Androidプログラミング:Big Nerd Ranch Guide




定義

pxまたはdotは物理スクリーン上のピクセルです。

dpiは、物理スクリーン上の1インチあたりのピクセルであり、ディスプレイの密度を表します。

Androidはいくつかの密度に別名を与える

  • ldpi(低)〜120dpi
  • mdpi(中)〜160dpi
  • hdpi(高)〜240dpi
    • 2015年のほとんどの端末がここにあります
  • xhdpi(超高)〜320dpi
    • Apple iPhone 4/5/6、Nexus 4
  • xxhdpi(余分な超高)〜480dpi
    • ネクサス5
  • xxxhdpi(超特別高)〜640dpi

ディップまたはdpは、 濃度非依存ピクセルであり 、すなわち、それらは、物理的密度に応じて多かれ少なかれピクセルに対応する。

  • 1dp = 1px on mdpi

spまたはsipスケールに依存しないピクセルです。 [設定] > [ アクセシビリティ ]で [ 大文字 ]オプションをオンにすると、

  • 1sp = 1dp
  • アクセス可能な1sp = 1.2dp大文字

何を使用するのですか?

テキストサイズにはspを使用します。

それ以外はすべてdpを使います。




基本的にpxが適用される唯一の時間は1pxです。これは、分割線の場合のように画面上に正確に1つのピクセルが必要な場合です。

160 dpi以上では、2〜3ピクセル、

120 dpi以上では、0に丸められます。




どこで&pxとdpの関係を使うの?

密度非依存ピクセル(dp)

UIレイアウトを定義するときに使用する仮想ピクセル単位で、レイアウトの寸法を表現したり、密度に依存しない方法で配置することができます。 上述したように、濃度非依存ピクセルは、160dpiスクリーン上の1つの物理ピクセルに相当し、これは、「中」の濃度スクリーンについてシステムによって想定されるベースライン濃度である。 実行時に、システムは使用中の画面の実際の密度に基づいて、必要に応じてdpユニットのスケーリングを透過的に処理します。 dp単位の画面ピクセルへの変換は簡単です:

px = dp *(dpi / 160)。

例えば、240dpiのスクリーンでは、1dpは1.5物理ピクセルに等しい。 アプリケーションのUIを定義するときには、dp単位を常に使用して、異なる密度の画面にUIが正しく表示されるようにする必要があります。

ピクセルをdpに、またはその逆を理解することは非常に重要です(特に、クリエイティブチームに正確なdp値を与えるため)

dp = px * 160 / dpi

MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.

HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp

For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
 4.7" diagonal
  • クリエイティブチームから偶数のピクセル値をすべて取得してみてください。 さもなければ、0.5を掛けている間に精度が失われます。

px

これは上で説明した通りです。 レイアウトファイルを使わないでください。 しかし、pxが必要な場合もあります。 たとえば、ListViewディバイダ行です。 画面解像度を越えたすべての分割線として1ピクセルのラインを与えるためには、pxが優れています。

sp

フォントサイズにはspを使用します。 次に、デバイスフォントのサイズが変更されている間に、アプリケーション内のフォントだけが変更されます(つまり、表示 - >フォントがデバイスに表示されます)。 静的なサイズのフォントをアプリケーション内に保持したい場合は、dpでフォントのサイズを指定できます。 このような場合、決して変更されません。 開発者は、spの代わりにdpを使用することができるように、いくつかの特定の画面についてそのような要件を得ることができます。 それ以外の場合は、spを推奨します。




テキストや外観のサイズに関係するものは、 spまたはpt使用する必要があります。 一方、 dpではコントロールのサイズやレイアウトなどに関連するものを使用する必要があります。

その場所でdpdip両方を使うことができます。




sp =スケール独立ピクセル

dp = dip =濃度非依存ピクセル

dpi =ドット/インチ

spを使うのは避けるべきです。

複数の画面をサポートするには、 dpを使用する必要があります。

Androidはさまざまな画面解像度をサポートしています

  • ldpi(低)~120 dpi
  • mdpi(中)〜160 dpi
  • hdpi(高)〜240 dpi
  • xhdpi(超高)〜320 dpi
  • xxhdpi(超高倍率)〜480 dpi
  • xxxhdpi(余分な超過高)〜640 dpi

120 dpのldpiデバイスは1インチのサイズで120ピクセルを持ちます。

他の密度と同じ...

ソフトウェアエンジニアは、この変換式を使用する必要があります。

ピクセル= dp *(密度/ 160)

したがって、240dpiデバイスの1dpは、1 *(240/160)= 3/2 = 1.5ピクセルになります。

480dpiデバイスの1dpは、1 *(480/160)= 3ピクセルになります。

この1.5および3ピクセルの知識を使用して、ソフトウェアエンジニアはさまざまな密度のレイアウトを設計できます。

任意のデバイスの画面パラメータを確認するには:

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);

Toast.makeText(
    this,
    "4:" + metrics.heightPixels + "," + metrics.density + ","
    + metrics.densityDpi, Toast.LENGTH_LONG).show();



dpi -

  • 1インチあたりのドット数
  • 画面のピクセル密度を測定します。

px - ピクセル

  • 画面ピクセルのマッピング

ポイント - ポイント

  • 物理的な画面サイズに関して、約1/72インチ。

物理的な画面サイズ(1インチ= 2.54 cm)に対して、インチ単位で表示されます。

ミリメートル - 物理的なスクリーンサイズに関して。

sp - スケール独立ピクセル。

  • ユーザーのフォントサイズ設定に基づいています。
  • フォントは 'sp'にする必要があります。

ディップ -

  • ディップ== dp
  • 密度に依存しないピクセル。
  • 画面密度に応じて異なります。
  • 160dpiの画面では、1dp = 1ピクセル。
  • テキストのフォントサイズ以外はdpを使用してください。

標準では、dpとspが使用されます。 フォントサイズはsp、それ以外はdpです。

ユニットの変換式:

px = dp *(dpi / 160)。

Density Bucket -> Screen Display => Physical Size        => Pixel Size                   

ldpi         -> 120 dpi          => 0.5 x 0.5 in         => 0.5 in * 120 dpi = 60x60 px   

mdpi         -> 160 dpi          => 0.5 x 0.5 in         => 0.5 in * 160 dpi = 80x80 px   

hdpi         -> 240 dpi          => 0.5 x 0.5 in         => 0.5 in * 240 dpi = 120x120 px  

xhdpi        -> 320 dpi          => 0.5 x 0.5 in         => 0.5 in * 320 dpi = 160x160 px  

xxhdpi       -> 480 dpi          => 0.5 x 0.5 in         => 0.5 in * 480 dpi = 240x240 px 

xxxhdpi      -> 640 dpi          => 0.5 x 0.5 in         => 0.5 in * 640 dpi = 320x320 px  



Androidで使用される数式は次のとおりです。

px = dp *(dpi / 160)

ここで、dpiは以下の画面密度のいずれかです。 すべての可能な密度の一覧はこちらへ

それは "DENSITY_ *"定数を定義します。

  • ldpi(低)〜120dpi
  • mdpi(中)〜160dpi
  • hdpi(高)〜240dpi
  • xhdpi(超高)〜320dpi
  • xxhdpi(余分な超高)〜480dpi
  • xxxhdpi(超特別高)〜640dpi

ここから撮影。

これは、画面のdpiを知っていれば、pxとdpの間で翻訳を行う際に混乱をたくさん取り除きます。

だから、あなたは60 dpの物理的なピクセルサイズは、hdpi画面の60 dpの画像をしたいとしましょう:

px = 60 * (240 / 160)



コミュニティwikiの回答をお読みください。以下は、上記の回答に加えて考慮すべき情報です。

sp =スケール独立ピクセル

dp =密度に依存しないピクセル

dpi =密度ピクセル

私は上記の答えを見てきました...それらを正確に見つけることはできません。spはテキストサイズ、dpはレイアウト境界 - 標準です。しかし、テキストサイズのspは、ほとんどのデバイスで不用意使用された場合、レイアウトを破壊します。

spはデバイスのtextsizeをとりますが、dpはデバイスの密度の標準をとります(デバイスで決して変更しないでください)。100spテキストはデバイスのフォントサイズに応じて画面の80%または画面の100%を占めることができます

あなたはまた、レイアウト境界のためのSPを使用することができ、それは:)動作しません全体のテキストには標準アプリの使用SPを

UXを考慮して、テキストサイズにはspとdpを使用します。

  • ツールバーのテキストにspを使用しないでください(使用可能なアンドロイドディメンションを使用できます)
  • 小さなバウンドのボタン、非常に小さなテキストなどでは、テキストにspを使用しないでください。

携帯電話の中で巨大なFONTを使って読みやすくする人もいます。必要に応じてspにテキストを入力しますが、レイアウトを破らないようにしてください。

同様に、すべてのディメンションをサポートする1​​つのアプリケーションがある場合は、xxxhdpiアセットを追加するとアプリのサイズが大幅に増加します。しかし、xxxhdpiの電話機は一般的なので、サイドバー、ツールバー、およびボトムバーのアイコンにはxxxhdpiアセットを少なくとも含む必要があります。ベクトル画像に移動して、すべての画面サイズで均一で高画質な画像を表示する方が良いです。




画面サイズのAndroidでは、カテゴリに分類されldpimdpihdpixhdpixxhdpixxxhdpiスクリーン密度は、 画面のある領域(インチなど)内のピクセルの量です。一般的には、1インチあたりのドット数で測定されdpiます。

PX(Pixels):

  • スクリーンピクセルにマップする通常の標準ピクセル。px絶対ピクセルを意味します。これは、幅や高さの絶対ピクセル数を指定する場合に使用します。お勧めしません。

DP/DIP(Density pixels / Density independent pixels):

  • dip == dp。以前のAndroidバージョンでは、dipが使用され、後でdipに変更されましたdp。これはの代替ですpx

  • 一般的にpx絶対値なので決して使用しません。px幅や高さの設定に使用し、そのアプリケーションが異なる画面サイズのデバイスにダウンロードされている場合、そのビューは画面の元のサイズに従って伸びません。

  • dpの代わりに使用することを強くお勧めしますpxdp幅と高さが画面サイズに基づいて動的に拡大縮小することを言いたい場合に使用します。

  • 我々が与えるならdp/dip、アンドロイドは自動的に160ピクセルサイズのスクリーンに基づいてピクセルサイズを計算するでしょう。

SP(Scale independent pixels):

  • ユーザーのフォントサイズ設定に基づいてスケーリングされます。フォントを使用する必要がありますsp

  • さまざまな画面サイズに合わせてフォントサイズを指定する場合は、を使用しますsp。これはに似てdp.USE spフォントサイズを動的に画面サイズに基づいて成長&縮小し、特にために

Android Documentationによると:

ディメンションを指定するときは、常に1 dpつまたは複数のsp単位を使用します。A dpは、160における画素の物理的サイズに対応する濃度非依存画素であるdpi。An spは同じベースユニットですが、ユーザーの好みのテキストサイズ(スケールに依存しないピクセル)でスケールされているため、テキストサイズを定義するときにこの測定単位を使用する必要があります




携帯電話の画面は、ピクセル(px)として知られる何千もの小さな点で構成されています。ピクセルは、画像を作るために行く最小の要素です。画像や言葉遣いを作るピクセル数が多いほどシャープになり、スマートフォンの画面をより読みやすくします。

画面解像度は、画面上のピクセル数で測定されます。画面解像度は、デバイスを購入する際によく使用される仕様ですが、実際には、タッチデバイスの物理サイズが実際に重要な物理的なサイズという概念をピクセル単位で考えることはできないため、Android用に設計すると便利です。

密度に依存しないピクセル(dpまたはdip)によって、デザイナーはターゲットデバイスの解像度や密度に関係なく、期待される方法で表示されるアセットを作成できます。

濃度非依存ピクセル(dpまたはdip)は、ベースライン密度または160dpi(ドット/インチ)で1ピクセルに等しい。

1px / 1dp = 160dpi / 160dpi

2px / 1dp = 320dpi(2x)/ 160dpi

ここで、

dpiはドット/インチ

したがって、320dpiでは、1dpは2pxに等しくなります。

px / dp = dpi / 160dpi

1インチ当たりのドット数(dpi)は、ディスプレイスクリーン上の鮮明度(すなわち、照射された点の密度)の尺度である。所与の画像解像度に対する1インチ当たりのドット数は、同じ数の画素が異なる空間上に広がっているので、全体的な画面サイズに基づいて異なる。

密度に依存しないピクセルを扱うことで、ピクセル解像度は同じで空間は異なる2つのデバイスがあるような状況に対処することができます。あるケースでは、タブレットと携帯電話のピクセル解像度がそれぞれ1280 x 800ピクセル(160 dpi)と800 x 1280ピクセル(320 dpi)であると仮定します。

タブレットはベースラインの密度(160 dpi)にあるため、物理的にも密度にも左右されないピクセルサイズは1280 x 800で同じです。一方、電話機はピクセル密度が高いため、物理的な密度独立ピクセルの半分ピクセル。したがって、電話機は400×640の密度に依存しないピクセルを持っています。したがって、密度に依存しないピクセルを使用すると、タブレットが電話よりもはるかに広いスペースを持つことを精神的に容易に想像することができます。

同様に画面サイズは同じでピクセル密度が異なる2つのデバイス(800×1280ピクセル(320 dpi)、もう1つは400×640ピクセル(160 dpi))を使用している場合、完全に定義する必要はありませんこれらの2つのデバイスのレイアウトが異なるため、両方のデバイスで同じである密度に依存しないピクセルの観点からアセットを測定できます。

800×1280ピクセル(320dpi)= 400×640密度独立ピクセル(dp)

400×640画素(160dpi)= 400×640の濃度独立画素(dp)

スケール独立ピクセル(sp)は、フォントサイズに適した単位です。アクセシビリティのために、Androidではユーザーがデバイスのフォントサイズをカスタマイズできます。テキストの読み取りに問題があるユーザーは、デバイスのフォントサイズを大きくすることができます。通常、携帯電話やタブレットのディスプレイ設定でフォントサイズでこのオプションを見つけることができます。アクセシビリティ設定によっても利用できることがよくあります。

スケールに依存しないピクセルでは、デバイスのフォントサイズが標準または100%の場合、16spは16dpとまったく同じです。しかし、デバイスのフォントサイズが大きい場合、たとえば125%の場合、16 spは20 dpまたは1.25倍に変換されます。

フォントサイズの単位としてdpを使用すると、ユーザーがデバイスのフォントサイズをカスタマイズしても、そのテキストのサイズは特定の物理サイズになります。SPユニットを使用すると、視力障害のある人にとってより良い経験をするでしょう。

リファレンスUdacity、Google




スケーラブルなサイズのユニットであるSDPは、基本的にユニットではなく、さまざまな画面サイズのディメンションリソースです。

Intuitからsdpライブラリを試してください。ユニットの問題を解決することは非常に便利で、複数の画面をすばやくサポートできます

使用法

android:paddingBottom="@dimen/_15sdp"正とandroid:layout_marginTop="@dimen/_minus10sdp"負のsdp sdpの場合

これは、values-sw<N>dpフォルダ内の各サイズ(sw = smallestWidth)のdpに相当する値を持ちます。

注意

慎重に使用してください! ほとんどの場合、タブレット用に別のレイアウトを設計する必要があります。

<LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="@dimen/_minus10sdp"
          android:paddingBottom="@dimen/_15sdp"
          android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="♡"
                    android:textColor="#ED6C27"
                    android:textSize="@dimen/_70sdp"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="U"
                    android:textColor="@android:color/black"
                    android:textSize="@dimen/_70sdp" />
            </LinearLayout>

テキストサイズにはdbを使用できますが、テキストサイズにはsspを使用することをおsspします。

詳細については、ライブラリGitHubページをチェックしてください




私は理解しやすい方法を提供したいと思いdpます。実際、私dpは理解するのが一番簡単だと思います。dpちょうど物理的な長さ単位です。mmまたはと同じ次元inchです。私たちが書くことは、単に便利だ50dp60dpのではなく、50/160 inchまたは60/160 inch1であるため、dpただで1/160 inch画面サイズや解像度が何であれ。

唯一の問題は、一部の画面のアンドロイドdpiが正確でないことです。たとえば、160dpiに分類された画面は実際に170dpiを持つことがあります。したがって、の計算結果dpはあいまいです。それはほぼ同じでなければなりません1/160 inch




Related