「px」、「dip」、「dp」、「sp」の違いは何ですか?
-
19-09-2019 - |
質問
Android の測定単位の違いは何ですか?
- ピクセル
- 浸漬
- DP
- sp
解決
ピクセル
ピクセル - 画面上の実際のピクセルに対応します。で
インチ - 画面の物理サイズに基づきます。
1 インチ = 2.54 センチメートルんん
ミリメートル - 画面の物理サイズに基づきます。ポイント
ポイント - 画面の物理サイズに基づく 1/72 インチ。DP または 浸漬
密度- 独立したピクセル - 画面の物理密度に基づく抽象的な単位。これらの単位は 160 を基準としています DPI 画面なので、160 dpi 画面では 1 dp は 1 ピクセルです。の比率 dp-to-pixelは画面密度によって変化しますが、必ずしも変化しません 正比例で。注記:コンパイラは "dip" と "dp" ですが、"dp" は "sp" とより一貫性があります。sp
規模-独立したピクセル - これは dp 単位に似ていますが、ユーザーのフォント サイズの設定によっても拡大縮小されます。それはあなたをお勧めします フォントサイズを指定するときにこの単位を使用すると、フォントサイズが調整されます 画面密度とユーザーの好みの両方について。
+----------------+----------------+---------------+-------------------------------+
| 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 デザイン ドキュメント.
他のヒント
これに関するほとんどすべてと、さまざまなサイズと密度の複数の画面を最適にサポートする方法については、ここで詳しく文書化されています。
画面サイズ
実際の物理サイズ。画面の対角線として測定されます。わかりやすくするために、Android では実際のすべての画面サイズが 4 つにグループ化されています 一般化されたサイズ:小、普通、大、特大。画面密度
の物理領域内のピクセル数 スクリーン;通常は dpi (ドット/インチ) と呼ばれます。たとえば、 「低」密度の画面は、所与の物理領域内のピクセル数が少なく、 「標準」または「高」密度の画面と比較します。簡単にするために、 Android では、すべての実際の画面密度が 6 つの一般化された 密度:低、中、高、超高、超高、および エクストラ・エクストラ・エクストラ・ハイ。オリエンテーション
ユーザーの視点から見た画面の向き 眺める。これは横向きまたは縦向きのいずれかであり、画面の アスペクト比は、それぞれ幅が広いか高いかのいずれかです。以下の点に注意してください。 異なるデバイスのみが異なる方向で動作するように、 デフォルトですが、ユーザーが デバイスを回転させます。解決
上の物理ピクセルの総数 画面。複数の画面のサポートを追加する場合、アプリケーションは 解像度を直接操作しません。アプリケーションには注意が必要です 画面サイズと密度のみで、一般化された サイズと密度のグループ。密度に依存しないピクセル (dp)
仮想の UIレイアウトを定義するときに使用すべきピクセル単位で、 密度に依存しない方法でのレイアウト寸法または配置。密度に依存しないピクセルは、160 の 1 つの物理ピクセルに相当します DPI 画面 (これは、システムが想定するベースライン密度です。 「中」密度の画面。実行時には、システムは透過的に処理します 必要に応じて、実際の密度に基づくDP単位のスケーリング 使用中の画面の。dp 単位からスクリーンピクセルへの変換は、 簡単:px = dp * (dpi / 160)
. 。たとえば、240 dpi の画面では、1 dp は 1.5 物理ピクセルに相当します。次の場合は、常に dp 単位を使用する必要があります アプリケーションの UI を定義して、UI が適切に表示されるようにします。 密度の異なるスクリーン。
複数の種類のデバイス向けの Android アプリの開発に真剣に取り組んでいる場合は、画面サポートの開発ドキュメントを少なくとも 1 度は読んだことがあるはずです。それに加えて、特定の画面構成を持つアクティブなデバイスの実際の数を把握しておくことは常に有益です。
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
コントロール。サポートされている画面サイズに応じて、異なるサイズの画像を作成する必要があります。
100 * 100 px
mdpiのイメージ150 * 150 px
HDPI用の画像200 * 200 px
xhdpiの画像
ピクセル ピクセル - スケールごとのポイントは、画面上の実際のピクセルに対応します。
で インチ - 画面の物理サイズに基づきます。
ミリメートル ミリメートル - 画面の物理サイズに基づきます。
PTの ポイント - 画面の物理サイズに基づく 1/72 インチ。
DPの
密度 - 独立したピクセル - 画面の物理密度に基づく抽象的な単位。これらの単位は 160 dpi の画面を基準としているため、 dp
160 dpi 画面上の 1 ピクセルです。dp-to-pixelの比率は、画面密度によって変化します。
しかし、必ずしも正比例しているわけではありません。注記:コンパイラは両方を受け入れます dip
そして dp
, 、 けれど dp
より一貫性があります sp
.
SPの
-スケールに依存しないピクセル - これは次のようなものです dp
単位
ただし、ユーザーのフォントサイズ設定によってもスケーリングされます。本機はフォントサイズを指定する際に使用することをお勧めします。
そのため、画面密度とユーザーの好みの両方に合わせて調整されます。
同じサイズの 2 つの画面の例を考えてみましょう。一方の画面密度は 160 dpi (1 インチあたりのドット数、つまり 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
さらに、次の概念について明確に理解している必要があります。
画面サイズ:
実際の物理サイズ。画面の対角線として測定されます。わかりやすくするために、Android では実際のすべての画面サイズを 4 つの一般化されたサイズ:小、普通、大、特大。
画面密度:
画面の物理領域内のピクセルの量。通常は dpi (ドット/インチ) と呼ばれます。たとえば、 「低」密度の画面は、所与の物理領域内のピクセル数が少なく、 「標準」または「高」密度の画面と比較します。簡単にするために、 Android では、すべての実際の画面密度が 4 つの一般化された 密度:低、中、高、超高。
オリエンテーション:
ユーザーの視点から見た画面の向き。これは横向きまたは縦向きのいずれかであり、 画面のアスペクト比は、それぞれワイドまたはハイトのいずれかです。ご注意 異なるデバイスが異なる方向で動作するだけでなく、 既定では変更されますが、ユーザーが デバイスを回転させます。
解決:
画面上の物理ピクセルの総数。複数画面のサポートを追加する場合、アプリケーションは直接動作しません 解像度付き。アプリケーションは画面のみに関心を持つ必要があります 一般化されたサイズと密度で指定されるサイズと密度 グループ。
密度に依存しないピクセル (dp):
UI レイアウトを定義するときに、レイアウトの寸法を表すために使用する仮想ピクセル単位、または 密度に依存しない方法で配置します。密度に依存しないピクセル は、160 dpi 画面の 1 つの物理ピクセルに相当します。 「中程度」の密度画面に対してシステムによって想定されるベースライン密度。実行時に、システムは dp のスケーリングを透過的に処理します 必要に応じて、使用中の画面の実際の密度に基づく単位。dp 単位から画面ピクセルへの変換は簡単です。px = dp * (dpi / 160).たとえば、240 dpi の画面では、1 dp は物理 1.5 に相当します ピクセル。定義するときは、常に dp 単位を使用する必要があります。 アプリケーションの UI を使用して、画面上で UI を適切に表示できるようにします。 異なる密度。
参照: Android 開発者サイト
dp
はdip
です。すべて(マージン、パディング、など。)のためにそれを使用します。
のために使用sp
{テキストサイズ}のみ。
異なる画面密度に同じサイズを取得するには、Androidは、実行時に各画素にこれらのユニットを変換するので、あなたがするためのトリッキーな数学はありません。
<時間>異なる画面サイズにpx
、dp
とsp
の違いを参照してください。
定義
ピクセル またはドットは ピクセル 物理的な画面上で。
dpi 物理画面上の 1 インチあたりのピクセル数であり、ディスプレイの密度を表します。
アンドロイドが与える 複数の密度に対するエイリアス名
- ldpi (低) ~120dpi
- mdpi (中) ~160dpi
- HDPI (高) ~240dpi
- 2015 年のほとんどのデバイスがここにあります
- xhdpi (特高) ~320dpi
- Apple iPhone 4/5/6、Nexus 4
- xxhdpi (超超高) ~480dpi
- ネクサス5
- xxxhdpi (超超超高) ~640dpi
浸漬 または DP は 密度に依存しないピクセル, 、つまり物理的な密度に応じて、多かれ少なかれピクセルに対応します。
- 1dp = mdpi の 1px
sp または 一口飲む です スケールに依存しないピクセル. 。それらは次のときにスケーリングされます。 大きいテキスト オプションがオンになっています 設定 > アクセシビリティ
- 1sp = 1dp
- 1sp = 1.2dp (アクセシビリティ付き) 大きいテキスト
何を使うか?
使用 sp テキストサイズの場合。
使用 DP 他のすべてのために。
ソース3:(ソース 3 のデータを以下に示します)
これらは、XML で定義されたディメンション値です。ディメンションが指定されている 数値の後に測定単位が続きます。例えば:10px、2インチ、 5spです。Android では次の測定単位がサポートされています。
DP
密度に依存しないピクセル - 画面の物理密度。これらの単位は 160 dpi を基準としています (ドット/インチ)画面で、1dpはほぼ1pxに等しくなります。いつ 高密度の画面で実行している場合、描画に使用されるピクセル数 1dp は、画面の dpi に適した係数でスケールアップされます。同様に、低密度の画面では、使用されるピクセル数 1dpの場合は縮小されます。dp とピクセルの比率は、 画面密度ですが、必ずしも正比例ではありません。dp の使用 単位 (px 単位ではなく) は、ビューを作成するための簡単な解決策です レイアウトの寸法は、画面ごとに適切にサイズ変更されます 密度。言い換えれば、現実世界に一貫性を提供します 異なるデバイス間での UI 要素のサイズ。
sp
スケールに依存しないピクセル - これは dp 単位と似ていますが、 ユーザーのフォントサイズ設定によってスケーリングされます。使用することをお勧めします この単位はフォントサイズを指定するときに調整されるため、 画面密度とユーザーの好みの両方。
ポイント
ポイント - 画面の物理サイズに基づく 1/72 インチ。
ピクセル
ピクセル - 画面上の実際のピクセルに対応します。このユニットの measure は、実際の表現が異なる可能性があるため、推奨されません デバイス間。各デバイスは、それぞれ異なるピクセル数を持つことができます。 インチで表示され、画面上で使用できる合計ピクセル数が増減する場合があります。
んん
ミリメートル - 画面の物理的なサイズに基づきます。
で
インチ - 画面の物理的なサイズに基づきます。
注記: ディメンションは、(XML ファイルの名前ではなく) name 属性で指定された値を使用して参照される単純なリソースです。そのため、1 つの XML ファイル内の 1 つの要素の下で、ディメンション リソースを他の単純なリソースと組み合わせることができます。
基本的にPXが適用される唯一の時間は、1つのピクセルで、あなたが分周器の場合のように、画面上で正確に一つのピクセルをしたい場合には、ですます:
> 160 dpiのでは、あなたは2-3ピクセルを得ることができます。、
> 120 DPIで、それは0に丸めます。
ピクセル
ピクセル - 画面上の実際のピクセルに対応します。
dpまたはディップ
密度に依存しないピクセル - 画面の物理密度に基づく抽象的な単位。これらの単位は 160 dpi 画面を基準としているため、1 dp は 160 dpi 画面上の 1 ピクセルに相当します。
dp の使用:
密度の独立性 - アプリケーションは、異なる密度の画面に表示されたときに、ユーザー インターフェイス要素の物理的なサイズ (ユーザーの観点から見た) を保持するときに、"密度の独立性" を実現します。(つまり) 画像は、異なる種類の画面でも同じサイズ (拡大または縮小せず) に見える必要があります。
sp
スケールに依存しないピクセル - これは dp 単位に似ていますが、ユーザーのフォント サイズの設定によってもスケールされます。
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
どこで何を使うのか、pxとdpの関係は?
密度に依存しないピクセル (dp)
UI レイアウトを定義するときに使用する仮想ピクセル単位。密度に依存しない方法でレイアウトの寸法や位置を表現します。上で説明したように、密度に依存しないピクセルは、160 dpi 画面上の 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 が必要な場合もあります。たとえば、ListView の区切り線です。ここでは、すべての画面解像度の区切り線として 1 ピクセルのラインを指定するには、px の方が適しています。
sp
フォントサイズにはspを使用します。次に、デバイスのフォント サイズが変更される間、アプリケーション内のフォントのみが変更されます (つまり、[表示] -> [デバイス上のフォント])。アプリ内で静的なサイズのフォントを保持したい場合は、フォントの寸法を dp で指定できます。このような場合、それは決して変わりません。開発者は、一部の特定の画面でこのような要件を受ける場合があります。その場合、開発者は sp の代わりに dp を使用できます。それ以外の場合は、sp を推奨します。
あなたは下の画像からpx
とdp
の違いを見ることができます。また、px
とdp
が異なる画面上の同じ物理的な大きさを保証することができなかったことを見つけることができます。
テキストと外観の大きさに関連したものはすべてsp
またはpt
を使用する必要があります。一方、その他のコントロール、レイアウト、サイズに関係する何かがdp
と共に使用する必要があります。
あなたは、その場所でdp
とdip
の両方を使用することができます。
私は唯一のDPを使用することになります。
フォントサイズの「SP」を使用して話がたくさんある、と私はポイントを感謝しながら、私は設計の観点から行うには正しいことだとは思いません。あなたは、ユーザーがいくつかのグラグラフォントサイズの選択をしていると、ユーザーは、のアプリのではなく、自分の人生の選択肢を責めることになります場合は、あなたのデザインを壊してしまうことができます。
また、あなたが160 dpiのタブレット上のSP-フォントのアプリを取る場合、あなたは見つけることのすべてののは、スケールアップ...しかし、比較して小さな見に行くされたフォント、。それはよく見ていないです。
「SP」のフォントのアイデアは良い心を持っていますが、、それが悪い考えです。すべてのためのDPに固執します。
sp = スケールに依存しないピクセル
dp = ディップ = 密度に依存しないピクセル
dpi = 1 インチあたりのドット数
使用は避けるべきです 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)
したがって、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();
との差 dp
そして sp
「」と記載されている単位ユーザーのフォントサイズの設定「公式ドキュメントからコピーされた回答によると、変更することで実行時に確認できます Settings->Accessibility->Large Text
オプション。
Large Text
オプションを選択すると、テキストが強制的に次のようになります 1.3
倍大きい。
private static final float LARGE_FONT_SCALE = 1.3f;
もちろん、これはベンダーに依存する可能性があります。 パッケージ/アプリ/設定.
dpi -
- インチあたりのドット数
- 画面のピクセル密度を測定します。
px - ピクセル
- 画面ピクセルのマッピング用
pt - ポイント
- 物理的な画面サイズに関しては、約 1/72 インチです。
インチ - 物理的な画面サイズ(1インチ= 2.54 cm)に関して。
mm-ミリメートル - 物理的な画面サイズに関して。
sp - スケールに依存しないピクセル。
- ユーザーのフォント サイズの設定に基づきます。
- フォントは「sp」にする必要があります。
ディップ -
- ディップ == 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
Android で使用される式は次のとおりです。
px = dp * (dpi / 160)
ここで、dpi は次の画面密度のいずれかです。可能なすべての密度のリストについては、 ここに行きます
「DENSITY_*」定数を定義します。
- ldpi (低) ~120dpi
- mdpi (中) ~160dpi
- HDPI (高) ~240dpi
- xhdpi (特高) ~320dpi
- xxhdpi (超超高) ~480dpi
- xxxhdpi (超超超高) ~640dpi
から引用 ここ.
画面の dpi がわかっている場合、これにより、px と dp の間で変換する際の多くの混乱が解決されます。
したがって、HDPI 画面に 60 dp の画像が必要な場合、60 dp の物理ピクセル サイズは次のようになります。
px = 60 * (240 / 160)
画面サイズ で Android
カテゴリにグループ化されています small
, medium
, large
, extra large
, double-extra
そして triple-extra
. 。画面密度は、画面の領域 (インチなど) 内のピクセル数です。一般的には、1 インチあたりのドット数 (dpi) で測定されます。画面密度は、低、中、高、超高に分類されます。解像度は画面内のピクセルの総数です。
- DP: 密度独立ピクセル。画面密度に基づいて変化します。160 dpi 画面では、1 dp = 1 ピクセルです。フォントサイズを除いて、常に dp を使用します。
- 浸漬: ディップ == dp。以前の Android バージョンでは dip が使用されていましたが、後に dp に変更されました。
- スプ: スケール独立ピクセル。ユーザーのフォント サイズ設定に基づいてスケールされます。フォントはspを使用する必要があります。
- ピクセル: 画面ピクセルにマッピングされる通常の標準ピクセル。
- で: 物理的な画面サイズに対するインチ。
- んん: 物理的な画面サイズに対してミリメートル。
- ポイント: 物理的な画面サイズに対して 1/72 インチ。
単位間の換算式
px = dp * (dpi / 160)
デバイス内の dp から px へ
次の例は、理解を深めるのに役立つかもしれません。スケーリングは、120(ldpi)、160(mdpi)、240(hdpi)、320(xhdpi)、480(xxhdpi)、および 640(xxxhdpi) のバケット サイズに基づいて行われます。Google が推奨する設計比率は、ldpi:mdpi:hdpi:xhdpi:xxhdpi で 3:4:6:8:12 です。
150px X 150px の画像が占有されます。
- mdpi で 150 dp X 150 dp の画面スペース
- HDPI で 100 dp X 100 dp の画面スペース
- xhdpi で 75 dp X 75 dp の画面スペース
すべての 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/
- px - 1 ピクセル。CSS、JavaScript などで使用されるものと同じです。
- sp - スケールに依存しないピクセル
- dip - 密度に依存しないピクセル
通常、sp はフォント サイズに使用され、その他のサイズには dip (dp とも呼ばれます) が使用されます。
コミュニティ wiki からの回答をお読みください。上記の回答に加えて考慮すべき情報を以下に示します。
sp = スケールに依存しないピクセル
dp = 密度に依存しないピクセル
dpi = 密度ピクセル
私は上記の答えを検討しました...それらが正確に正しいとは言えませんでした。テキスト サイズの sp、レイアウト境界の dp - 標準。しかし テキストサイズのspは不注意に使用するとレイアウトを壊します ほとんどのデバイスで。
sp はデバイスのテキストサイズを取りますが、dp はデバイス密度標準のテキストサイズを取ります (デバイスでは変更されません) たとえば、100spテキストは、デバイスに設定されているフォントサイズに応じて、画面の80%または画面の100%を占める可能性があります
レイアウト境界に sp を使用することもできます。それは機能します:)全文にSPを使用する標準アプリはありません
UXを考慮して文字サイズはspとdpを使用します。
- ツールバーのテキストに sp を使用しないでください (dp を使用すると、さまざまな画面サイズで利用できる Android の寸法を使用できます)
- 小さな境界付きボタンや非常に小さなテキストなどのテキストには sp を使用しないでください。
読みやすさを高めるために携帯電話で大きなフォント サイズを使用する人もいますが、ハードコードされた小さなサイズのテキストを与えると UX の問題になります。必要に応じてテキストに sp を挿入しますが、レイアウトを壊さないようにしてください。
同様に、すべてのディメンションをサポートする単一のアプリがある場合、xxxhdpi アセットを追加するとアプリのサイズが大幅に増加します。しかし、今では xxxhdpi 電話が一般的になっているため、少なくともサイドバー、ツールバー、ボトムバーのアイコンには xxxhdpi アセットを含める必要があります。すべての画面サイズで均一で高品質の画像を得るには、ベクター画像に移行することをお勧めします。
また、携帯電話でカスタム フォントを使用していることにも注意してください。そのため、フォントがないと、スペースなどに関する問題が発生する可能性があります。たとえば、カスタム フォントのテキスト サイズ 12sp は、デフォルト フォントよりもいくつかのピクセルが余分に必要になる可能性があります。
Android の画面密度とベース密度の詳細については、Google 開発者サイトを参照してください。https://developer.android.com/training/multiscreen/screendensities
さまざまな画面解像度に合わせた Android アプリの UI の設計に関する優れた記事を見つけたので、この分野で検索している人のためにここに残しておきたいと思います。はい、それが何らかの形で Google ドキュメントに説明されているのは知っています (そして上記の投稿でも言及されています)。それを読みましたが、私にとっては良くありませんでした (ええ、私はあまりにも愚かかもしれません))。さまざまな画面サイズに対応できるレイアウトをどのように設計するかは、私にとって不明瞭なままでした。私は、さまざまな画面に「柔軟な」UI レイアウトを実装する必要がある DP コンセプトなどを嫌います。(iOS 開発者の皆さん - そうです、これは Storyboard のコンセプトです)。
Android の UI コンセプトは悪くありませんが、残念ながら iOS のストーリーボード機能がありません。Android で柔軟な UI をデザインすることは、(よく言っても)簡単なことではありません。
Android でさまざまな画面サイズに合わせたレイアウトを作成するために何をすべきかを理解するのに役立った記事を次に示します。
JMSTUDIO ブログ :- Android アプリの画面サイズを決定する
さまざまな画面サイズに合わせて Android アプリの UI をデザインする方法
さまざまな画面サイズに合わせてアプリの UI を設計するには、最初の設計で次のことを行う必要があります 各画面サイズに必要な最小スペースを満たします。Android では、 各一般化された画面タイプの最小サイズ (DP)。ここでは、 Android の画面サイズのガイドライン。 画面サイズをdpで取得すると、設計するだけでは不十分です Android アプリの UI。画面サイズごとに、グラフィックを準備する必要があります 各密度のビットマップ画像。これがAndroidの画面密度です ガイドライン。
計算を簡単にするために、3:4:6:8のスケーリング比に従うことができます。 4 つの一般化密度。36×36ピクセルの画像を作成すると、 LDPIデバイスでは、MDPIの残りの密度画像サイズは48×48になります。 HDPI の場合は 72×72、xhdpi の場合は 96×96。
Photoshop で Android アプリの UI をデザインする方法
多くのデザイナーは、Photoshopやその他のピクセルでAndroidアプリのUIをデザインする際に問題を抱えています 密度に依存しないユニットDPによるグラフィックデザインツールに基づいています。デザイナーは dp をピクセルにマッピングする方法を知りません。グーグルも与えません 明確なAndroidUIデザインガイドですが、基本的な DPとピクセルの平行移動の式。
Android の定義として、160 dpi デバイス (mdpi) では 1pd は 1px に相当します。そこで、xlargeAndroidデバイス用のAndroidアプリを設計したいと思います。 mdpi 密度では、UI サイズ (ピクセル単位) を幅 960 ピクセルとして定義できます 高さは720px。同じマッピングルールに従うと、次のようになります。 Android アプリの画面サイズ UI 設計ガイドラインに従います。
追加した:「柔軟な」UI にも興味がある場合は、このライブラリをご覧ください。 新しいサイズ単位である sdp (スケーラブル dp) を提供する Android SDK。このサイズの単位は画面サイズに合わせて調整されます (これはここの回答でも述べられていますが、 SDP
図書館)
追加2 Google はついに iOS Storeboard UI コンセプトの有用性を理解しました。 ConstraintLayout
Android の世界の場合: ConstraintLayout を使用してレスポンシブ UI を構築する
のdp: (density independent pixels)
1)の
DPの一個の単位で表される画素の数は、画面の解像度が増加するにつれて増加します。逆に、より低い解像度を有する装置に、DPのユニット上で表される画素の数が減少します。これは相対的単位であるので、と比較するためのベースラインを有する必要があります。このベースラインは160 dpiの画面です。これは方程式である:px = dp * (dpi / 160).
2)のsp: (scale independent pixels)
の
このユニットは、(DPに類似)画面解像度、ならびにユーザのフォントサイズの好みに応じてスケーリングする。
3)のpx: (pixels)
の
画面上の実際のピクセルまたはドットます。
画面サイズ Android ではカテゴリにグループ化されています ldpi
, mdpi
, hdpi
, xhdpi
, xxhdpi
そして xxxhdpi
. 画面密度 画面の領域 (インチなど) 内のピクセル数です。一般に、1 インチあたりのドット数 (dpi
).
PX(Pixels):
- 画面ピクセルにマッピングされる通常の標準ピクセル。
px
絶対ピクセルを対象としています。これは、幅または高さを絶対ピクセルで指定する場合に使用されます。お勧めしません。
DP/DIP(Density pixels / Density independent pixels):
dip == dp
. 。以前の Android バージョンでは dip が使用されていましたが、後に次のように変更されました。dp
. 。これは次の代替品ですpx
.通常、私たちは決して使用しません
px
それは絶対値だからです。使用する場合px
幅または高さを設定し、そのアプリケーションが異なる画面サイズのデバイスにダウンロードされている場合、そのビューは画面の元のサイズに従って拡大されません。dp
の代わりに使用することを強くお勧めしますpx
. 。使用dp
幅と高さを指定して、画面サイズに基づいて動的に拡大および縮小したい場合。私たちが与えれば
dp/dip
, Androidは160ピクセルサイズの画面に基づいてピクセルサイズを自動的に計算します。
SP(Scale independent pixels):
ユーザーのフォント サイズの設定に基づいて拡大縮小されます。フォントは使用する必要があります
sp
.さまざまな画面サイズに適合するフォント サイズについて言及する場合は、次のように使用します。
sp
. 。これは次のようなものですdp
。使用sp
特にフォント サイズは画面サイズに基づいて動的に拡大および縮小します。
Android のドキュメントには次のように書かれています。
寸法を指定するときは、常に次のいずれかを使用します
dp
またはsp
単位。あdp
です の物理サイズに対応する密度に依存しないピクセル 160のピクセルdpi
. 。アンsp
は同じ基本単位ですが、 ユーザーが好むテキストサイズ(スケールに依存しないピクセル)なので、 テキストサイズを定義するときに、この測定単位を使用する必要があります
携帯電話の画面は、「」として知られる数千の小さな点で構成されています。 ピクセル (ピクセル). 。ピクセルは、画像を構成する最小の要素です。スマートフォンの画面は、絵や文字の画素数が多いほど鮮明になり、読みやすくなります。
画面の解像度は、画面上のピクセル数で測定されます。画面の解像度は、デバイスを購入するときによく使用される仕様ですが、Android 向けに設計する場合には実際にはあまり役に立ちません。ピクセルの観点から画面を考えると、タッチ デバイスにとって非常に重要な物理サイズの概念が無視されるためです。
密度に依存しないピクセル (dp または dip) デザイナーは、ターゲット デバイスの解像度や密度に関係なく、期待どおりに表示されるアセットを作成できます。
密度に依存しないピクセル (dp またはディップ) は、ベースライン密度または 160 dpi (ドット/インチ) での 1 ピクセルに相当します。
1 ピクセル/1 dp = 160 dpi/160 dpi
2 px/1dp = 320 dpi(2x)/160 dpi
どこ、
dpi は 1 インチあたりのドット数です
したがって、320 dpi では、1 dp は 2 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 つのデバイスがある場合、たとえば 1 つが 800 x 1280 ピクセル (320 dpi) で、もう 1 つが 400 x 640 ピクセル (160 dpi) である場合、完全に定義する必要はありません。両方のデバイスで同じである密度に依存しないピクセルの観点から資産を測定できるため、これら 2 つのデバイスではレイアウトが異なります。
800 × 1280 ピクセル (320dpi)=400 × 640 密度独立ピクセル (dp)
400 × 640 ピクセル (160 dpi)=400 × 640 密度独立ピクセル (dp)
スケール独立ピクセル(sp) フォント サイズの推奨単位です。アクセシビリティを目的として、Android ではユーザーがデバイスのフォント サイズをカスタマイズできるようにしています。テキストを読むのが難しいユーザーは、デバイスのフォント サイズを大きくすることができます。このオプションは通常、携帯電話またはタブレットの表示設定のフォント サイズの下にあります。多くの場合、アクセシビリティ設定からも利用できます。
スケールに依存しないピクセルでは、デバイスのフォント サイズが標準または 100% の場合、16 sp は 16 dp とまったく同じになります。ただし、デバイスのフォント サイズが大きい場合 (125%、16 sp など) は、20 dp、つまり 16 の 1.25 倍に変換されます。
フォント サイズの単位として dp を使用する場合、ユーザーがデバイスのフォント サイズをカスタマイズしたかどうかに関係なく、そのテキストの物理サイズは特定の物理サイズになります。spユニットを使用すると、視力に障害のある方も快適にご利用いただけます。
参照: ユダシティ, 、 グーグル
それは自動的に自分のデバイスで、ユーザーが使用しているフォントサイズに応じて拡大縮小されるため、SP:規模の独立した画素
あなたは文章でそれを使用する必要があります。
PX:ピクセルまたは画像要素は、画面上の一点である
この質問に答える前に、まずユニット数を減らしてみましょう。それでは、どうぞ: dpまたはディップ どちらも同じであり、として知られています 密度に依存しないピクセル.
1.ピクセル - ピクセルを表します。ピクセルは、画面上の単一の点、点です。一般にモバイル業界では、ppi (ピクセル/インチ) で測定されます。画面解像度は ppi に正比例し、1 インチあたりのピクセル数が大きいほど画面解像度は高くなります。
たとえば、あるサイズの画像を描画すると、 200ピクセル * 200ピクセル, の場合、高解像度デバイスと低解像度デバイスでは外観が異なるはずです。その理由は、 200ピクセル 低解像度の携帯電話での画像は、高解像度のデバイスでの画像よりも大きく見えます。
下の画像は、異なる携帯電話で同じ画像の解像度を示しています。
2.ディップまたはディップ - 画面の物理密度に基づく抽象的な単位。これらの単位は、 160 dpi 画面なので、1 dp は画面上の 1 ピクセルです。 160 dpi画面。dp 対ピクセルの比率は画面密度に応じて変化しますが、必ずしも正比例するとは限りません。「密度独立性」とは、異なる密度の画面上で UI 要素を均一に表示することを指します。
- 表示されている画像 80px (左側の画像) そして 80 dp (右側の画像). 。チェックアウトの違い。
dp は、密度が 1 である画面上の 1 つの物理ピクセルに相当します。 160. 。dp を計算するには:
dp = (ピクセル単位の幅 * 160) / 画面密度
3.sp - スケーラブル ピクセルを表します。一般的に sp UI 上のテキストに使用され、 sp フォント設定を保持します。たとえば、ユーザーがより大きなフォントを選択した場合、 30sp ユーザーの好みに応じて自動的に大きく表示されるようになります。
私はdp
を理解する簡単な方法を提供したいです。実際に、私はdp
を理解するための最も簡単な1だと思います。 dp
はちょうど物理的な長さの単位です。それはmm
またはinch
と同じ次元のです。 1 50dp
だけで、画面サイズや解像度が何であれ60dp
あるので、私たちは、50/160 inch
、60/160 inch
はなくdp
または1/160 inch
を書くことは、単に便利です。
唯一の問題は、いくつかの画面のアンドロイドDPIは正確ではない、ということです。例えば、160dpiに分類される画面は、実際に170dpiであってもよいです。だから、dp
の計算結果があいまいです。それは1/160 inch
とほぼ同じである必要があります。
の - スケーラブルなサイズのユニット - 基本的には、異なる画面サイズの単位が、寸法のリソースではありません
。インテュイットから SDP のライブラリを試してみてください。これは、ユニットの問題を解決するために非常に便利だし、あなたは、の迅速複数の画面のをサポートすることができます。
使用方法
負SDP SDPのための正とandroid:paddingBottom="@dimen/_15sdp"
ためandroid:layout_marginTop="@dimen/_minus10sdp"
これは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>
SSP のテキストサイズのため。
詳細については、ライブラリGitHubのページを確認します。