web-dev-qa-db-ja.com

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

Androidの測定単位の違いは何ですか?

  • px
  • 浸漬
  • dP
  • sp
5522
capecrawler

Android Developer Documentation から:

  1. px
    ピクセル - は画面上の実際のピクセルに対応します。

  2. in
    インチ - 画面の実際のサイズに基づく。
    1インチ= 2.54センチ

  3. mm
    ミリメートル - 画面の実際のサイズに基づく。

  4. pt
    ポイント - 画面の物理サイズに基づく1/72インチ。

  5. dp または dip
    密度 - 独立ピクセル - 画面の物理的な密度に基づく抽象的な単位。これらの単位は160 dpiの画面を基準にしているため、1 dpは160 dpiの画面上の1ピクセルです。ピクセルに対するdpの比率は、画面の密度によって変わりますが、必ずしも正比例するわけではありません。注:コンパイラは "dip"と "dp"の両方を受け入れますが、 "dp"は "sp"とより一貫しています。

  6. sp
    スケール - 独立ピクセル - これはdp単位に似ていますが、ユーザーのフォントサイズ設定によってもスケールされます。フォントサイズを指定するときは、この単位を使用することをお勧めします。そのため、画面サイズとユーザーの好みの両方に合わせてサイズが調整されます。

Androidにおける密度独立性の理解 _より:

+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | 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 | 
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit    | Description | Units Per     | Density     | Same Physical Size | 
|         |             | Physical Inch | Independent | On Every Screen    | 
+---------+-------------+---------------+-------------+--------------------+
| px      | Pixels      | Varies        | No          | No                 | 
+---------+-------------+---------------+-------------+--------------------+
| in      | Inches      | 1             | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| mm      | Millimeters | 25.4          | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| pt      | Points      | 72            | Yes         | Yes                | 
+---------+-------------+---------------+-------------+--------------------+
| dp      | Density     | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+
| sp      | Scale       | ~160          | Yes         | No                 | 
|         | Independent |               |             |                    | 
|         | Pixels      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

詳しい情報は Google Design Documentation にもあります。

5523
Alex Volovoy

これに関するほとんどすべて、およびサイズと密度が異なる複数の画面を最適にサポートする方法については、こちらで詳しく説明されています。

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

スクリーン密度
画面の物理的領域内のピクセル数。通常dpi(ドット/インチ)と呼ばれます。例えば、「低」密度スクリーンは、「通常」または「高密度」スクリーンと比較して、所与の物理的領域内の画素数が少ない。簡単にするために、Androidでは、実際のすべての画面密度を6つの一般的な密度(低、中、高、超高、超特大、超特大)にグループ化しています。

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

分解能
画面上の物理ピクセルの総数。複数画面のサポートを追加する場合、アプリケーションは直接解像度を使用して機能しません。一般化されたサイズと密度のグループで指定されているように、アプリケーションはスクリーンのサイズと密度のみに関心があるべきです。

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

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

653
Bruiser

どのようにしてdpがpxに正確に変換されるのかを詳しく説明します。

  • Mdpiデバイスで実行している場合、150 x 150 pxイメージは画面スペースの150 * 150 dpを占有します。
  • Hdpiデバイスで実行している場合、150 x 150 pxイメージは画面スペースの100 * 100 dpを占有します。
  • Xhdpiデバイスで実行している場合、150x150 pxイメージは画面スペースの75 * 75 dpを占有します。

逆の方法として、アプリケーションに画像を追加したい場合、100 * 100 dpコントロールを埋めるにはそれが必要だとします。サポートされている画面サイズには、異なるサイズの画像を作成する必要があります。

  • mdpiの100 * 100 pxイメージ
  • hdpiの150 * 150 pxイメージ
  • xhdpiの200 * 200 pxイメージ
323
devmiles.com

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

inインチ - 画面の実際のサイズに基づく。

mmミリメートル - 画面の実際のサイズに基づく。

ptポイント - 画面の実際のサイズに基づく1/72インチ。

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

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

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

                          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
266
Amit Gajera

さらに、次の概念について明確に理解している必要があります。

画面サイズ:

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

スクリーン密度:

画面の物理的領域内のピクセル数。通常dpi(ドット/インチ)と呼ばれます。例えば、「低」密度スクリーンは、「通常」または「高密度」スクリーンと比較して、所与の物理的領域内の画素数が少ない。簡単にするために、Androidでは、実際のすべての画面密度を4つの一般的な密度(低、中、高、および超高)にグループ化しています。

オリエンテーション:

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

解決策:

画面上の物理的なピクセルの総数。複数画面のサポートを追加する場合、アプリケーションは直接解像度を使用して機能しません。一般化されたサイズと密度のグループで指定されているように、アプリケーションはスクリーンのサイズと密度のみに関心があるべきです。

濃度非依存ピクセル(dp):

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

参照: Android開発者サイト

213

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

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


異なる画面密度で同じサイズを取得するために、Androidは実行時にこれらの単位をピクセルに変換するため、複雑な計算は不要です。


異なる画面サイズでのpxdp、およびspの違いを参照してください。

Enter image description here

出典: アンドロイドプログラミング:The Big Nerd Ranch Guide

187
Mina Gabriel
135
chaitanya

定義

pxまたはドットは、物理画面上のピクセルです。

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

Androidはいくつかの密度に エイリアス名を与えます

  • ldpi(低)〜120dpi
  • mdpi(中)〜160dpi
  • hdpi(高)〜240dpi
    • 2015年のほとんどの端末はこちら
  • xhdpi(超高)〜320dpi
    • Apple iPhone 4/5/6、Nexus 4
  • xxhdpi(超特大)〜480dpi
    • ネクサス5
  • xxxhdpi(超過超過)〜640dpi

dipまたはdpは密度に左右されないピクセル、つまり、物理密度に応じて、より多くの、またはより少ないピクセルに対応します。

  • mdpiでは1dp = 1px

enter image description here

spまたはsipスケールです - 独立したピクセルラージテキストオプションがオンになっている場合は拡大縮小されます。 Settings > Accessibility

  • 1sp = 1dp
  • 1sp = 1.2dp(アクセシビリティラージテキストあり)

何を使う?

テキストサイズにはspを使用してください。

それ以外の場合はdpを使用してください。

128
rds

ソース1

ソース2

ソース3 :(ソース3からのデータを以下に示します)

これらはXMLで定義されているディメンション値です。次元は、数値とそれに続く測定単位で指定されます。例えば、10px、2in、5spです。次の測定単位はAndroidでサポートされています。

dp

密度に依存しないピクセル - 画面の物理的な密度に基づく抽象的な単位。これらの単位は、160 dpi(1インチあたりのドット数)の画面を基準としています。1dpiは1 pxとほぼ同じです。より高い密度のスクリーンで走るとき、1dpを引くのに使用されるピクセルの数はスクリーンのdpiに適切な係数によって拡大されます。同様に、低密度スクリーンでは、1dpに使用されるピクセル数が縮小されます。ピクセルに対するdpの比率は、画面の密度によって変わりますが、必ずしも正比例するわけではありません。 (px単位の代わりに)dp単位を使用することは、レイアウト内のビューのサイズをさまざまな画面密度に合わせて適切にサイズ変更するための簡単な方法です。言い換えれば、それは異なるデバイス間であなたのUI要素の実世界のサイズのための一貫性を提供します。

sp

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

pt

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

px

ピクセル - 画面上の実際のピクセルに対応します。実際の表示はデバイスによって異なるため、この測定単位はお勧めできません。各装置は、1インチ当たりのピクセル数が異なっていてもよく、スクリーン上で利用可能な総ピクセル数がこれより多くても少なくてもよい。

mm

ミリメートル - 画面の物理サイズに基づきます。

in

インチ - 画面の物理的サイズに基づきます。

注: ディメンションは、name属性で指定された値(XMLファイルの名前ではない)を使用して参照される単純なリソースです。そのため、1つの要素の下にある1つのXMLファイルで、ディメンションリソースを他の単純なリソースと組み合わせることができます。

121
sms247

基本的にはpxが適用される唯一の時間は1 pxです、そしてそれはあなたがスクリーン上にちょうど1ピクセルが欲しい場合です。

160 dpiを超えると、2〜3ピクセルになることがあります。

120 dpiを超えると、0に丸められます。

110
Joe Plante

px

ピクセル - 画面上の実際のピクセルに対応します。

dpまたはdip

濃度に依存しないピクセル - 画面の物理的な密度に基づく抽象的な単位。これらの単位は160 dpiの画面を基準にしているため、1 dpは160 dpiの画面上の1ピクセルです。

dpの使用:

密度に依存しない - 密度が異なる画面に表示されたときにユーザーインターフェイス要素の物理的なサイズ(ユーザーの視点から)を保持すると、アプリケーションは「密度に依存しない」になります。 (つまり)画像は、異なる種類のスクリーンで同じサイズ(拡大または縮小されていない)に見えるはずです。

sp

スケールに依存しないピクセル - これはdpの単位に似ていますが、ユーザーのフォントサイズの設定によってもスケールされます。

http://developer.Android.com/guide/topics/resources/more-resources.html#Dimension

92
Nirav Ranpara

Pxとdpの間の関係はどこにありますか。

濃度独立ピクセル(dp)

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

px = dp *(dpi / 160)。

たとえば、240 dpiの画面では、1 dpは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区切り線です。ここでpxは、画面解像度を横切るすべての分割線として1ピクセルラインを指定するのに適しています。

sp

フォントサイズにはspを使用してください。その場合、アプリケーション内のフォントだけがデバイスフォントサイズの変更中に変更されます(つまり、[表示] - > [デバイス上のフォント])。アプリ内で固定サイズのフォントを使いたい場合は、フォントサイズをdpで指定できます。そのような場合、それは決して変わらないでしょう。開発者は、特定の画面に対してこのような要件を満たすことがあります。そのため、開発者はspの代わりにdpを使用できます。他のすべての場合では、spが推奨されます。

90
Arunjyothis

下の図からpxdpの違いを見ることができます。また、pxdpは異なる画面で同じ物理サイズを保証できないこともわかります。

enter image description here

82
Zephyr

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

その場所にdpdipの両方を使用できます。

74
Atish Agrawal

私はdpだけを使うでしょう。

フォントサイズに "sp"を使用することについては多くの話がありますが、その点は理解できますが、デザインの観点からするのが正しいことではないと思います。ユーザーがフォントサイズの選択に問題があると、デザインを壊すことになりかねません。ユーザーは自分の人生の選択ではなくthe appのせいにするでしょう。

また、160 dpiのタブレットでspフォントのアプリを使用すると、everythingが拡大表示されますが、フォントは小さくなります。見栄えはよくありません。

"sp"フォントのアイデアは良い心を持っていますが、それは悪い考えです。すべてについてはdpに固執してください。

66
bharal

sp =スケールに依存しないピクセル

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

dpi = 1インチあたりのドット数

sp は使用しないでください。

複数の画面をサポートするには dp を使うべきです。

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

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

120 dpi ldpiデバイスは、1インチサイズで120ピクセルです。

他の密度についても同じです。

ソフトウェアエンジニアとして私たちはこの変換式を使うべきです:

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

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

また、480 dpiのデバイスの1 dpは、= 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();
61
Kushal

公式文書からコピーした回答で「 ユーザーのフォントサイズの設定 」と記載されているdpspの違いは、実行時にSettings->Accessibility->Large Textオプションを変更することで確認できます。

Large Textオプションは、テキストを1.3倍大きくします。

private static final float LARGE_FONT_SCALE = 1.3f;

これは packages/apps/Settings にあるので、当然ベンダーに依存します。

57
auselen

dpi -

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

px - ピクセル

  • スクリーンピクセルのマッピング用

pt - ポイント

  • 実際の画面サイズに対して、約1/72インチです。

インチ - インチ - 実際の画面サイズ(1インチ= 2.54 cm)。

mm - ミリメートル - 物理的な画面サイズに関して。

sp - スケールに依存しないピクセル.

  • ユーザーのフォントサイズ設定に基づきます。
  • フォントは 'sp'でなければなりません。

ディップ -

  • dip == dp
  • 濃度独立ピクセル.
  • 画面密度によって異なります。
  • 160 dpiの画面では、1 dp = 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  
50
Arunendra

画面サイズ Androidでは、カテゴリsmallmediumlargeextra largedouble-extra、およびtriple-extraに分類されています。画面密度は、画面の領域(インチなど)内のピクセル数です。通常、1インチあたりのドット数(dpi)で測定されます。画面密度は、低、中、高、そして超高に分類されます。解像度は画面内の総ピクセル数です。

  • dp: Density Independent Pixel、画面の密度によって異なります。 160 dpiの画面では、1 dp = 1ピクセルです。フォントサイズを除いて、常にdpを使用してください。
  • dip: dip == dp。以前のAndroidバージョンではdipが使用され、後でdpに変更されました。
  • sp: Scale Independent Pixel。ユーザーのフォントサイズ設定に基づいて拡大縮小されます。フォントはspを使うべきです。
  • px: スクリーンピクセルにマッピングする通常の標準ピクセル。
  • in: インチ、実際の画面サイズ。
  • mm: mm。物理的な画面サイズに対して。
  • pt: 1/72インチ(物理画面サイズに対して)。

単位間の変換式

 px = dp * (dpi / 160)

デバイス内のpxへのdp

次の例は理解を深めるのに役立ちます。スケーリングは、120(ldpi)、160(mdpi)、240(hdpi)、320(xhdpi)、480(xxhdpi)、および640(xxxhdpi)のバケットサイズに基づいて行われます。グーグルが提案する設計比は、ldpi:mdpi:hdpi:xhdpi:xxhdpiに対して3:4:6:8:12です。

150ピクセル×150ピクセルの画像が占める

  • 150 dpi x 150 dpiの画面スペース(mdpi)
  • 100 dpi x 100 dpiの画面スペース(hdpi)
  • 75 dpi X 75 dpiの画面スペース(xhdpi)

あなたはすべてのAndroidデバイスで統一されたUIデザインをしたい場合は、次のDPI計算機を使用して画像サイズやその他の寸法を修正できます。

JavaでのDPI計算機

/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/


public class DPICalculator {

private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;    

private float forDeviceDensity;
private float width;
private float height;

public DPICalculator(float forDeviceDensity, float width, float height){
    this.forDeviceDensity = forDeviceDensity;
    this.width = width;
    this.height = height;
}

public static void main(String... args) {
    DPICalculator dpiCalculator = new DPICalculator(240,330,120);
    dpiCalculator.calculateDPI();
}


private float getPx(float dp, float value) {
    float px = dp * (value / forDeviceDensity );        
    return px;
}

private void calculateDPI() {

    float ldpiW = getPx(LDPI,width);        
    float ldpiH =  getPx(LDPI,height);
    float mdpiW = getPx(MDPI,width);        
    float mdpiH =  getPx(MDPI,height);        
    float hdpiW = getPx(HDPI,width);        
    float hdpiH =  getPx(HDPI,height);       
    float xdpiW = getPx(XHDPI,width);        
    float xdpiH =  getPx(XHDPI,height);
    float xxdpiW = getPx(XXHDPI,width);        
    float xxdpiH =  getPx(XXHDPI,height);
    float xxxdpiW = getPx(XXXHDPI,width);        
    float xxxdpiH =  getPx(XXXHDPI,height);

    System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
    System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
    System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
    System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
    System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
    System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);        
   }
}

詳細情報は次のリンクを参照してください。

http://javapapers.com/Android/difference-between-dp-dip-sp-px-in-mm-pt-in-Android/ /

43
Ravi Vaghela

これはAndroidで使われている公式です:

px = dp *(dpi/160)

Dpiは、次の画面密度のいずれかです。すべての可能な密度のリストについては ここに行きなさい

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

  • ldpi(低)〜120dpi
  • mdpi(中)〜160dpi
  • hdpi(高)〜240dpi
  • xhdpi(超高)〜320dpi
  • xxhdpi(超特大)〜480dpi
  • xxxhdpi(超過超過)〜640dpi

ここから から撮った。

あなたがあなたのスクリーンのdpiを知っていれば、これはpxとdpの間で翻訳するとき多くの混乱を整理するでしょう。

それで、あなたがhdpiスクリーンのために60dpのイメージが欲しいとしましょう、そして60dpの物理的なピクセルサイズは以下の通りです:

px = 60 * (240 / 160)
43
Dan Borza
  • px - CSS、JavaScriptなどで使用されているものと同じ1ピクセル。
  • sp - スケールに依存しないピクセル
  • dip - 濃度に依存しないピクセル

通常、spはフォントサイズに使用され、dipは他のフォントサイズにも使用されます(dpとも呼ばれます)。

42
DPC

コミュニティのWikiから答えを読んでください。上記の回答に加えて、考慮すべき情報がいくつかあります。

sp =スケールに依存しないピクセル

dp =濃度非依存ピクセル

dpi =濃度ピクセル

私は上記の答えを見てきました…それらが正確に正しいとは思わない。テキストサイズはsp、レイアウト範囲はdp - 標準。しかし、テキストサイズの spは、ほとんどのデバイスで不用意に使用された場合、レイアウトを壊します

spはデバイスのテキストサイズを取得しますが、dpはデバイス密度標準のテキストサイズを取得します(デバイスでは変更されません)。

enter image description here

あなたはレイアウト境界にもspを使うことができます、それはうまくいくでしょう:) 標準的なアプリは全テキストにspを使わない

UXを考慮したテキストサイズにはspとdpを使用してください。

  • ツールバー内のテキストにspを使用しないでください(dpを使用して、さまざまな画面サイズに対応したAndroidの寸法を使用できます)。
  • 小さい境界ボタン、非常に小さいテキストなどのテキストにはspを使用しないでください。

読みやすくするために大きなFONTサイズを自分の携帯電話に使用する人もいます。小さなハードコードサイズのテキストをUXの問題にする人もいます。必要に応じてテキストにspを付けますが、レイアウトを崩さないように注意してください。

同様に、すべてのディメンションをサポートする単一のアプリがある場合は、xxxhdpiアセットを追加するとアプリのサイズが大幅に増えます。しかし今ではxxxhdpi電話が一般的になっているので、サイドバー、ツールバー、ボトムバーのアイコンには少なくともxxxhdpiアセットを含める必要があります。すべての画面サイズで均一で高品質の画像を得るためには、ベクター画像に移動することをお勧めします。

また人々が彼らの電話で注文の壷を使用することに注意しなさい。だからフォントの欠如はスペースとすべてに関する問題を引き起こす可能性があります。カスタムフォントのテキストサイズ12spは、デフォルトフォントよりも数ピクセル余分にかかる場合があります。

38
shijin

私はさまざまな画面解像度のためのAndroidアプリUIの設計についての良い記事に出会いました、そして私はここでこの分野を探している誰かのためにそれを残したいです。はい、私はそれがどういうわけかグーグルの文書に記述されていることを知っています、そして私はそれを読みました、しかしそれは私には良くありませんでした(ええ、私はあまりに愚かかもしれません)。異なる画面サイズを処理できるレイアウトをどのように設計するかは、私にはまだわかりませんでした。異なる画面に「柔軟な」UIレイアウトを実装する必要がある場合は、DPの概念などが嫌いです。 (iOS開発者の皆さん、そうですね、ストーリーボードのコンセプトです。).

AndroidにはUIの概念は良くありませんが、残念ながらiOS Storyboardの機能がありません。 Androidで柔軟なUIをデザインするのは簡単なことではありません(せいぜい)。

これは、さまざまな画面サイズのレイアウトを作成するためにAndroidで何をすべきかを理解するのに役立つ記事です。

JMSTUDIOブログ: - Androidアプリの画面サイズを決定します

さまざまな画面サイズに対応するAndroidアプリのUIを設計する方法

さまざまな画面サイズに合わせてアプリのUIを設計するには、最初の設計では各画面サイズに必要な最小スペースを満たす必要があります。 Androidは、一般化された各画面タイプに対して最小サイズ(dp)を定義します。これがAndroidの画面サイズガイドラインです。 Minimum Screen Size for Android in dp dpで画面サイズを取得すると、AndroidアプリのUIを設計するだけでは不十分です。画面サイズごとに、密度ごとにグラフィックスとビットマップイメージを用意する必要があります。これはAndroidの画面密度ガイドラインです。 Android Density Guideline (dpi)

計算を簡単にするために、4つの一般化濃度の間の3:4:6:8のスケーリング比に従うことができます。 ldpiデバイス用に36×36ピクセルの画像を作成した場合、残りの濃度の画像サイズは、mdpiでは48×48、hdpiでは72×72、xhdpiでは96×96になります。

PhotoshopでAndroidアプリのUIをデザインする方法

多くのデザイナーは、密度に依存しない単位dpのために、フォトショップや他のピクセルベースのグラフィックデザインツールでAndroidアプリのUIをデザインするのに問題があります。設計者は、dpをピクセルにマッピングする方法を知りません。グーグルはまた彼らのために明確なアンドロイドUIデザインガイドを与えない、彼らはdpとピクセル変換のための基本的な公式を与える。

Androidの定義では、1pdは160 dpiデバイス(mdpi)で1pxに相当します。それで、私たちは、mdpi密度のxlarge Androidデバイス用のAndroidアプリをデザインしたいと思います。幅960ピクセル、高さ720pxのUIサイズをピクセル単位で定義できます。同じマッピングルールに従って、Androidアプリの画面サイズのUIデザインガイドラインに従うことができます。

Android App Screen Size in Pixel Guideline

_ added _ :あなたも "柔軟な" UIに興味があるなら、このライブラリを見てください。 新しいサイズの単位を提供するAndroid SDK - sdp(スケーラブルdp)。このサイズの単位は画面のサイズに比例します (これはSDPライブラリについての回答にもあります)

ADDED2 GoogleはついにiOS StoreboardのUIコンセプトの有用性を理解しました、そしてここでAndroidの世界のためのConstraintLayoutに行きます: ConstraintLayoutでレスポンシブUIを構築します

36
Mixaz

1)dp: (density independent pixels)

1インチあたりのドット数/ピクセル数が多いほど、画面の解像度が上がるにつれて、1単位のdpで表されるピクセル数が増えます。逆に、解像度が低いデバイスでは、dpの単位で表されるピクセル数が減少します。これは相対的な単位なので、比較するベースラインが必要です。このベースラインは160 dpiの画面です。これが方程式です:px = dp * (dpi / 160).


2)sp: (scale independent pixels)

この単位は、画面のdpi(dpと同様)とユーザーのフォントサイズの設定に応じて変わります。


3)px: (pixels)

画面上の実際のピクセルまたはドット。


詳細についてはあなたが訪問することができます

Android開発者ガイド>ディメンション
Android開発者ガイド>画面

29
IntelliJ Amiya

画面サイズ Androidの場合、カテゴリはldpimdpihdpixhdpixxhdpi、およびxxxhdpiに分類されます。 画面密度 は、画面の領域内(インチなど)のピクセル数です。通常、1インチあたりのドット数(dpi)で測定されます。

PX(Pixels):

  • スクリーンピクセルにマップする私たちのいつもの標準ピクセル。 pxは絶対ピクセルを意味します。あなたが幅または高さのために絶対的なピクセルに関して与えたいならば、これは使われます。お勧めしません。

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

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

  • 絶対値であるため、通常pxは使用しません。 pxを使用して幅または高さを設定し、そのアプリケーションがさまざまな画面サイズのデバイスにダウンロードされている場合、そのビューは画面の元のサイズに合わせて拡大されません。

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

  • dp/dipを指定した場合、Androidは自動的に160ピクセルサイズの画面に基づいてピクセルサイズを計算します。

SP(Scale independent pixels):

  • ユーザーのフォントサイズ設定に基づいて拡大縮小されます。フォントはspを使うべきです。

  • さまざまな画面サイズに合わせてフォントサイズを指定する場合は、spを使用してください。これはdpと似ていますspを使用すると、特にスクリーンサイズに基づいて動的に拡大縮小するフォントサイズを設定できます。

Androidのドキュメントは言う:

寸法を指定するときは、必ずdpまたはsp単位を使用してください。 dpは密度に依存しないピクセルで、160のdpiの物理サイズに対応します。 spは同じ基本単位ですが、ユーザーの好みのテキストサイズ(スケールに依存しないピクセル)で拡大縮小されるため、テキストサイズを定義するときはこの測定単位を使用する必要があります

28
Rajesh

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

画面の解像度は、画面上のピクセル数で測定されます。画面の解像度はデバイスを購入するときに一般的に使用される仕様ですが、Androidデバイス用に設計するときには実際にはそれほど役に立ちません。なぜならピクセル単位で画面を考えると物理サイズの概念は無視されるからです。

密度に依存しないピクセル(dpまたはdip) ターゲットデバイスの解像度や密度に関係なく、設計者は予想通りに見えるアセットを作成できます。

濃度に依存しないピクセル(dpまたはdip)は、ベースライン密度での1ピクセル、または160 dpi(1インチあたりのドット数)に相当します。

1ピクセル/ 1dp = 160 dpi/160 dpi

2ピクセル/ 1dp = 320 dpi(2 x)/ 160 dpi

どこで、

dpiは1インチあたりのドット数です

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

px/dp = dpi/160dpi

インチあたりのドット数(dpi)は、ディスプレイ画面上の鮮明さ(つまり、照らされた点の密度)の尺度です。同じピクセル数が異なるスペースに分散されているため、特定の画像解像度のインチあたりのドット数は画面全体のサイズによって異なります。

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

タブレットはベースライン密度(160 dpi)であるため、物理的および密度に依存しないピクセルサイズは同じ、1280 x 800です。一方、電話機のピクセル密度は高く、物理密度の半分の密度非依存ピクセルがあります。ピクセルだから携帯電話は400 x 640の密度独立ピクセルを持っています。そのため、密度に依存しないピクセルを使用すると、タブレットの方が携帯電話よりもはるかに広いスペースを精神的に描きやすくなります。

同様に、画面サイズは同じだがピクセル密度が異なる2つのデバイスがある場合、一方が800 x 1280ピクセル(320 dpi)で、もう一方が400 x 640ピクセル(160 dpi)の場合、全体を定義する必要はありません。私達が両方の装置のために同じである密度独立したピクセルの点で資産を測定することができるのでこれらの2つの装置のための異なったレイアウト。

800 x 1280ピクセル(320dpi)= 400 x 640の濃度非依存ピクセル(dp)

400 x 640ピクセル(160 dpi)= 400 x 640密度非依存ピクセル(dp)

スケールに依存しないピクセル(sp) はフォントサイズの優先単位です。ユーザー補助を目的として、Androidではユーザーがデバイスのフォントサイズをカスタマイズできます。テキストを読みにくいユーザーは、デバイスのフォントサイズを大きくすることができます。あなたは通常フォントサイズの下であなたの携帯電話またはタブレットのディスプレイ設定でこのオプションを見つけることができます。また、アクセシビリティ設定からも利用できます。

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

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

参照 不幸 、Google

21

sp:スケールに依存しないピクセル

それは彼のデバイスでユーザーによって使用されているフォントサイズに応じて自動的に拡大縮小されるため、テキストと共に使用する必要があります。

px:ピクセルまたはピクセルは画面上の一点です

17
A.Saini

この質問に答える前に、まずユニットの数を減らしましょう。だからここに行きます:dpまたはdipは両方とも同じで、濃度に依存しないピクセルとして知られています。

1. px - はピクセルを表します。ピクセルは1つのドットで、画面上を指します。一般的にモバイル業界ではppi(1インチあたりのピクセル数)で測定されます。画面の解像度はppiに正比例し、1インチあたりのピクセル数が多いほど画面の解像度は高くなります。

たとえば、サイズが{200 px * 200 pxのイメージを描画する場合、高解像度のデバイスと低解像度のデバイスでは外観が異なる必要があります。その理由は、低解像度の携帯電話の200 px画像は、高解像度のデバイスよりも大きく見えることです。

以下の画像は、異なる電話機で同じ画像の解像度を示しています -

  • 高画面解像度の電話番号

    Enter image description here

  • 画面解像度が低い電話

    Enter image description here

2. dipまたはdp - 画面の物理的な密度に基づく抽象的な単位。これらの単位は160 dpi画面を基準としているため、1 dpは160 dpi画面の1ピクセルです。ピクセルに対するdpの比率は、画面の密度によって変わりますが、必ずしも正比例するわけではありません。 「密度独立性」とは、密度が異なる画面上にUI要素を均一に表示することを意味します。

  • 80px(左側の画像)80 dp(右側の画像)を表示している画像。チェックアウトの違い.

Enter image description here

Dpはスクリーン上の1物理ピクセルに等しく、密度は{160です。 dpを計算するには:

dp =(ピクセル単位の幅* 160)/画面密度

3. sp - はスケーラブルピクセルを表します。通常、spはUI上のテキストに使用され、spはフォント設定を保持します。たとえば、ユーザーが30 spよりも大きなフォントを選択した場合、ユーザーの好みに応じて大きく表示されるように自動的に拡大縮小されます。

14
Rahul

_ sdp _ - スケーラブルサイズの単位 - 基本的には単位ではなく、さまざまな画面サイズのディメンションリソース。

Intuitの sdp ライブラリを試してください。ユニットの問題を解決するのはとても便利です、そしてあなたは素早く複数の画面をサポートするすることができます。

使用法

正の場合はAndroid:paddingBottom="@dimen/_15sdp"、負の場合はAndroid:layout_marginTop="@dimen/_minus10sdp"

values-sw<N>dpフォルダ内の各サイズに対して、dpと同等の値があります(sw = minimumWidth)。

注意

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

<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 をお勧めします。

詳しくは ライブラリGitHub page をチェックしてください。

13
Qamar

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

唯一の問題は、いくつかのスクリーンのアンドロイドdpiが正確ではないということです。たとえば、160dpiに分類された画面には、実際に170dpiがあります。だからdpの計算結果はあいまいです。それは1/160 inchとほぼ同じであるべきです。

13
ProtossShuttle

_ sdp _も存在します。

_ sdp _ - スケーラブルサイズの単位

新しいサイズの単位を提供するAndroid SDK - sdp(スケーラブルdp)。このサイズの単位は画面サイズに比例します。 Androidの開発者が複数の画面をサポートするのを助けます。

テキストビューについては、テキストのspサイズの単位に基づく ssp を参照してください。

注意!

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

11
Kamil Ibadov

Pixels(px) - 画面上の実際のピクセルに対応します。あなたが幅または高さのために絶対的なピクセルに関して与えたいならば、これは使われます。

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

スケールに依存しないピクセル(sp) - これはdp単位に似ていますが、ユーザーのフォントサイズの設定によっても拡大縮小されます。フォントサイズを指定するときは、この単位を使用することをお勧めします。そのため、画面サイズとユーザーの好みの両方に合わせてサイズが調整されます。

常にdpとspのみを使用してください。フォントサイズはsp、それ以外はすべてdpです。それは異なる密度を持つAndroidデバイスにUI互換性を持たせるでしょう。ピクセルとDPの詳細については、 https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp- をご覧ください。

ソースURL: - http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-Android/

8
lalit vasan

画素密度

画面のピクセル密度と解像度はプラットフォームによって異なります。デバイスに依存しないピクセルとスケーラブルなピクセルは、プラットフォームを超えた設計に柔軟に対応する方法を提供する単位です。

ピクセル密度の計算

1インチに収まるピクセル数をピクセル密度と呼びます。高密度スクリーンは、低密度スクリーンよりも1インチあたりのピクセル数が多くなります。

1インチに収まるピクセル数をピクセル密度と呼びます。高密度スクリーンは、低密度スクリーンよりも1インチあたりのピクセル数が多くなります。その結果、同じピクセルサイズのUI要素は、低密度の画面では大きく表示され、高密度の画面では小さく表示されます。

スクリーン密度を計算するには、次の式を使います。

画面密度=ピクセル単位の画面幅(または高さ)/インチ単位の画面幅(または高さ)

Hight density vs lower density displays

密度独立

画面のピクセル密度と解像度はプラットフォームによって異なります。デバイスに依存しないピクセルとスケーラブルなピクセルは、プラットフォームを超えた設計に柔軟に対応する方法を提供する単位です。

ピクセル密度の計算1インチに収まるピクセル数をピクセル密度と呼びます。高密度スクリーンは、低密度スクリーンよりも1インチあたりのピクセル数が多くなります。

密度独立性 は、密度が異なる画面上のUI要素の一様な表示を表します。

dp(「dips」と発音)と表記される濃度に依存しないピクセルは、任意の画面上で一様な寸法を持つように拡大縮小する柔軟な単位です。マテリアルUIは、密度に依存しないピクセルを使用して、異なる密度で画面上に要素を一貫して表示します。

  1. 密度に依存しない低密度画面
  2. 密度独立で表示された高密度画面

全文を読むhttps://material.io/design/layout/density-resolution.html#pixel-density

8
lava-lava

dp-to-pixel の比率は画面の密度によって変化しますが、必ずしも正比例するわけではありません。

:コンパイラは " dip "と " dp "の両方を受け入れますが、 " dp "は " sp "とより一貫しています。

縮尺に依存しないピクセル - これは dp 単位に似ていますが、ユーザーのフォントサイズ設定によっても拡大縮小されます。

7

Android SP vs DP

まず、彼らは何の略ですか?

spscale-independentピクセルを表します。

dp or dip(クールな場合はコードでdpを使用してください)は、密度に依存しないピクセルを表します。

2つの違いは何ですか?

無し!

どちらも1平方インチあたり160単位で、どちらも密度に依存せず、異なる画面で同じ物理サイズを持ちません。

したがって、いつspを使用する必要があり、いつdpを使用する必要がありますか?

テキストサイズ…にはspを使用しますが、これはユーザーのフォントサイズの設定によって拡大縮小されるためです。

他のすべてにはdpを使用します。

0
ORBIT