“ px”,“ dip”,“ dp”和“ sp”有什么区别?

Android度量单位有什么区别?

  • 像素
  • dp
  • SP

#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控件。 您需要为支持的屏幕尺寸创建不同尺寸的图像:

  • 用于mdpi的100 * 100 px图像
  • 150 * 150 px的Hdpi图片
  • xhdpi的200 * 200 px图像

#2楼

基本上,适用px的唯一时间是一个px,也就是说,如果您想要在屏幕上恰好一个像素(例如使用分隔线的情况):

在> 160 dpi时,您可能会获得2-3像素,

在> 120 dpi时,其舍入为0。


#3楼

px像素 -每刻度点数对应于屏幕上的实际像素。

以英寸为单位 -基于屏幕的物理尺寸。

毫米毫米 -基于屏幕的物理尺寸。

pt点 -基于屏幕的物理尺寸的1/72英寸。

dp密度 -独立的像素-基于屏幕物理密度的抽象单位。 这些单位是相对于160 dpi屏幕的,因此1 dp是160 dpi屏幕上的一个像素。 dp与像素的比率将随屏幕密度而变化,但不一定成正比。 注意:尽管dpsp更一致,但是编译器接受dipdp

sp-与缩放无关的像素 -类似于dp单位,但它也通过用户的字体大小首选项进行缩放。 建议您在指定字体大小时使用本机,以便针对屏幕密度和用户喜好进行调整。

以两个尺寸相同但屏幕密度为160 dpi(每英寸点数,即每英寸像素)的屏幕为例,另一个屏幕为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

#4楼

像素

像素-对应于屏幕上的实际像素。

dp或dip

密度无关像素-基于屏幕物理密度的抽象单位。 这些单位是相对于160 dpi屏幕的,因此1 dp是160 dpi屏幕上的一个像素。

使用dp:

密度独立性 -当您的应用程序以不同的密度显示在屏幕上时,保留用户界面元素的物理尺寸(从用户的角度来看),您的应用程序将实现“密度独立性”。 (即)在不同类型的屏幕中,图像的尺寸应相同(不能放大或缩小)。

SP

与比例无关的像素-就像dp单位一样,但是它也通过用户的字体大小首选项进行缩放。

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


#5楼

此外,您应该对以下概念有清楚的了解:

屏幕尺寸:

实际物理尺寸,以屏幕的对角线为单位。 为简单起见,Android将所有实际屏幕尺寸分为四个通用尺寸:小,普通,大和特大。

屏幕密度:

屏幕物理区域内的像素数量; 通常称为dpi(每英寸点数)。 例如,与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定的物理区域内具有较少的像素。 为简单起见,Android将所有实际屏幕密度分为四个广义密度:低,中,高和超高。

取向:

从用户的角度看屏幕的方向。 这可以是横向或纵向,这意味着屏幕的宽高比分别为宽或高。 请注意,默认情况下,不同的设备不仅会以不同的方向运行,而且在用户旋转设备时,其方向可能会在运行时发生变化。

解析度:

屏幕上的物理像素总数。 添加对多屏幕的支持时,应用程序无法直接使用分辨率工作; 应用程序应仅关注屏幕尺寸和密度,这由广义尺寸和密度组指定。

密度无关像素(dp):

在定义UI布局时应使用的虚拟像素单位,以密度独立的方式表示布局尺寸或位置。 与密度无关的像素等效于160 dpi屏幕上的一个物理像素,这是系统为“中”密度屏幕假定的基线密度。 在运行时,系统会根据使用中屏幕的实际密度,根据需要透明地处理dp单位的任何缩放比例。 dp单位到屏幕像素的转换很简单:px = dp *(dpi / 160)。 例如,在240 dpi屏幕上,1 dp等于1.5物理像素。 定义应用程序的UI时,应始终使用dp单位,以确保在具有不同密度的屏幕上正确显示UI。

参考: Android开发人员网站


#6楼

任何与文本大小和外观有关的内容都必须使用sppt 。 而与控件大小,布局等有关的任何内容都必须与dp一起使用。

您可以在其位置同时使用dpdip


#7楼

从官方文档复制的答案称为“ 用户字体大小首选项 ”的dpsp单位之间的差异可以在运行时通过更改Settings->Accessibility->Large Text选项看到。

Large Text选项将强制文本变大1.3倍。

private static final float LARGE_FONT_SCALE = 1.3f;

当然,这可能取决于供应商,因为它位于package / apps / Settings中


#8楼

我计算出以下公式,将dpi转换为dpsp 在此处输入图片说明


#9楼

来自Android开发者文档

  1. 像素
    像素 -对应于屏幕上的实际像素。


  2. 英寸 -基于屏幕的物理尺寸。
    1英寸= 2.54厘米

  3. 毫米
    毫米 -基于屏幕的物理尺寸。

  4. pt
    点数 -基于屏幕的物理尺寸的1/72英寸。

  5. dpdip
    密度无关像素-基于屏幕物理密度的抽象单位。 这些单位是相对于160 dpi屏幕的,因此1 dp是160 dpi屏幕上的一个像素。 dp与像素的比率将随屏幕密度而变化,但不一定成正比。 注意:尽管“ dp”与“ sp”更一致,但编译器接受“ dip”和“ dp”。

  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设计文档中找到


#10楼

来源1

来源2

来源3 :(来自来源3的数据如下)

这些是用XML定义的尺寸值。 用数字后跟度量单位指定维。 例如:10px,2in,5sp。 Android支持以下度量单位:

dp

与密度无关的像素-基于屏幕物理密度的抽象单位。 这些单位相对于160 dpi(每英寸的点数)屏幕,在该屏幕上1dp大致等于1px。 在更高密度的屏幕上运行时,用于绘制1dp的像素数量会按适合屏幕dpi的系数放大。 同样,在较低密度的屏幕上,用于1dp的像素数会按比例缩小。 dp与像素的比率将随屏幕密度而变化,但不一定成正比。 使用dp单位(而不是px单位)是一种简单的解决方案,可以针对不同的屏幕密度正确调整布局中的视图尺寸。 换句话说,它为跨不同设备的UI元素的实际大小提供了一致性。

SP

与缩放无关的像素-就像dp单位一样,但是它也通过用户的字体大小首选项进行缩放。 建议您在指定字体大小时使用本机,以便针对屏幕密度和用户的喜好进行调整。

pt

点数-基于屏幕的物理尺寸的1/72英寸。

像素

像素-对应于屏幕上的实际像素。 不建议使用此度量单位,因为实际的表示可能会因设备而异。 每个设备每英寸可能具有不同数量的像素,并且屏幕上可用的总像素可能更多或更少。

毫米

毫米-基于屏幕的物理尺寸。

英寸-基于屏幕的物理尺寸。

注意:维度是一种简单的资源,它使用name属性中提供的值(而不是XML文件的名称)进行引用。 这样,您可以在一个元素下的一个XML文件中将维度资源与其他简单资源结合在一起。


#11楼

哪里使用px和dp之间的关系?

密度无关像素(dp)

在定义UI布局时应使用的虚拟像素单位,以密度独立的方式表示布局尺寸或位置。 如上所述,与密度无关的像素等效于160 dpi屏幕上的一个物理像素,这是系统为“中”密度屏幕假定的基线密度。 在运行时,系统会根据使用中屏幕的实际密度,根据需要透明地处理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分隔线。 px在这里更好,因为它提供了一个像素行作为所有屏幕分辨率的分隔线。

SP

使用sp表示字体大小。 然后,随着设备字体大小的变化(即,显示->设备上的字体),只有应用程序内部的字体才会变化。 如果要在应用程序中保留静态大小的字体,可以在dp中指定字体尺寸。 在这种情况下,它将永远不会改变。 开发人员可能对某些特定屏幕有这样的要求,为此,开发人员可以使用dp代替sp。 在所有其他情况下,建议使用sp。


#12楼

dpdip 。 将其用于所有内容(边距,填充等)。

仅将sp用于{text-size}。


为了在不同的屏幕密度下获得相同的尺寸,Android在运行时将这些单位转换为像素,因此您无需进行任何复杂的数学运算。


在不同的屏幕尺寸上查看pxdpsp之间的区别。

在此处输入图片说明

资料来源: Android程式设计:The Big Nerd Ranch Guide


#13楼

  • px-一个像素,与CSS,JavaScript等中使用的像素相同。
  • sp-与比例无关的像素
  • dip-与密度无关的像素

通常sp用于字体大小,而dip用于其他字体(也称为dp)。


#14楼

我只会用dp。

有很多关于使用“ sp”作为字体大小的讨论,尽管我很欣赏这一点,但从设计的角度来看,我认为这样做是不正确的。 如果用户选择了一些不稳定的字体大小,最终可能会破坏您的设计,而最终用户将责备该应用程序 ,而不是自己的生活选择。

另外,如果您在160 dpi的平板电脑上使用sp-font应用,您会发现一切都在扩大……但是您的字体相比之下显得很小。 不好看。

尽管“ sp”字体的想法很不错,但这是一个糟糕的想法。 坚持使用dp进行所有操作。


#15楼

dpi-

  • 每英寸点数
  • 测量屏幕的像素密度。

px-像素

  • 用于映射屏幕像素

pt-点

  • 相对于物理屏幕尺寸,大约为1/72英寸。

英寸-相对于物理屏幕尺寸(1英寸= 2.54厘米)。

毫米-相对于物理屏幕尺寸。

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  

#16楼

您可以从下图看到pxdp之间的差异,并且还可以发现pxdp无法保证在不同屏幕上的相同物理尺寸。

在此处输入图片说明


#17楼

sp =比例无关像素

dp =倾斜=密度无关像素

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)

因此,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();

#18楼

这是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)

#19楼

1) dp: (density independent pixels)

随着屏幕分辨率的提高(当每英寸有更多点/像素时),以dp单位表示的像素数将增加。 相反,在分辨率较低的设备上,以dp为单位表示的像素数将减少。 由于这是一个相对单位,因此需要有一个基准进行比较。 此基准是160 dpi的屏幕。 这是等式: px = dp * (dpi / 160).


2) sp: (scale independent pixels)

该单位根据屏幕dpi(类似于dp)以及用户的字体大小首选项进行缩放。


3) px: (pixels)

屏幕上的实际像素或点。


有关更多详细信息,您可以访问

Android开发人员指南>尺寸
Android开发人员指南>屏幕


#20楼

Android中的屏幕大小分为ldpimdpihdpixhdpixxhdpixxxhdpi屏幕密度屏幕区域(如英寸)内的像素数量。 通常,它以每英寸点数( 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文档说:

指定尺寸时,请始终使用dpsp单位。 dp是与密度无关的像素,它对应于160 dpi像素的物理尺寸。 sp是相同的基本单位,但会根据用户的首选文本大小进行缩放(这是与缩放无关的像素),因此在定义文本大小时应使用此度量单位


#21楼

定义

px或点是物理屏幕上的像素

dpi是物理屏幕上的每英寸像素,代表显示的密度。

Android为几种密度提供别名

  • ldpi(低)〜120dpi
  • mdpi(中)〜160dpi
  • hdpi(高)〜240dpi
    • 2015年大多数设备都在这里
  • xhdpi(超高)〜320dpi
    • 苹果iPhone 4/5/6,Nexus 4
  • xxhdpi(超高)〜480dpi
    • Nexus 5
  • xxxhdpi(超高)〜640dpi

dipdp是非密度像素 ,即取决于物理密度,它们对应于更多或更少的像素。

  • 1dpi = 1像素(在mdpi上)

在此处输入图片说明

spsip是与比例无关的像素 。 在“设置” >“ 辅助功能”中打开“ 大字体”选项时,它们会缩放

  • 1sp = 1dp
  • 1sp = 1.2dp,具有可访问性大文本

使用什么?

使用sp作为文本大小。

dp用于其他所有内容。


#22楼

Android 屏幕尺寸分为smallmediumlargeextra largedouble-extratriple-extra 。 屏幕密度是屏幕区域(如英寸)内的像素数量。 通常,它以每英寸点数(dpi)为单位进行测量。 屏幕密度分为低,中,高和超高。 分辨率是屏幕中的像素总数。

  • dp:密度独立像素,它根据屏幕密度而变化。 在160 dpi屏幕中,1 dp = 1像素。 除字体大小外,请始终使用dp。
  • 倾角:倾角== dp。 在较早的Android版本中,使用了dip,后来更改为dp。
  • sp:缩放独立像素,根据用户的字体大小首选项进行缩放。 字体应使用sp。
  • px:我们通常的标准像素,它映射到屏幕像素。
  • in:英寸,相对于物理屏幕尺寸。
  • mm:相对于物理屏幕尺寸的毫米。
  • pt:相对于物理屏幕尺寸的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的图片将占据,

  • 150 dp X 150 dp屏幕空间(mdpi)
  • 100 dx X 100 dp屏幕空间(hdpi)
  • 75 dp X 75 dp屏幕空间,单位为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/


#23楼

我想提供一种简单的方法来了解dp 。 实际上,我认为dp是最容易理解的。 dp只是一个物理长度单位。 它的尺寸与mminch相同。 对于我们来说,写50dp60dp而不是50/160 inch60/160 inch ,因为无论屏幕大小或分辨率如何,一个dp仅为1/160 inch

唯一的问题是,某些屏幕的android dpi不准确。 例如,分类为160dpi的屏幕可能确实具有170dpi。 因此, dp的计算结果是模糊的。 它应大约等于1/160 inch


#24楼

我见过一篇不错的文章,关于为不同的屏幕分辨率设计Android应用程序UI,我想把它留在这里仅供那些在该领域搜索的人使用。 是的,我知道它在Google文档中有所描述(并在上面的帖子中提到),我读过,但这对我不利(是的,我可能太傻了))。 我仍然不清楚如何设计能够处理不同屏幕尺寸的布局。 当我需要为不同的屏幕实现“灵活的” UI布局时,我讨厌DP概念。 (嘿,iOS开发人员-是的,您说对了,这就是Storyboard的概念)。

Android的UI概念不错,但不幸的是缺少iOS Storyboard功能。 在Android中设计灵活的UI绝非易事(最好)。

这里有一篇文章,它帮助我了解了如何在Android中为不同的屏幕尺寸制作布局:

JMSTUDIO博客:-确定Android应用程序的屏幕大小

如何为不同屏幕尺寸的Android应用程序设计UI

为了设计用于不同屏幕尺寸的应用程序用户界面,我们的初始设计必须满足每种屏幕尺寸所需的最小空间。 Android为每种广义屏幕类型定义了最小尺寸(以dp为单位)。 这是Android屏幕尺寸指南。 dp中Android的最小屏幕尺寸 当我们获得以dp为单位的屏幕尺寸时,仅设计Android应用程序用户界面还不够。 对于每种屏幕尺寸,我们需要为每种密度准备图形和位图图像。 这是Android屏幕密度指南。 Android密度指南(dpi)

为了便于计算,我们可以遵循四个广义密度之间的3:4:6:8缩放比例。 如果我们为ldpi设备创建36×36像素的图片,则其他密度的图片尺寸对于mdpi为48×48,对于hdpi为72×72,对于xhdpi为96×96。

如何在Photoshop中设计Android Apps UI

由于密度独立单位dp,许多设计师在用photoshop或其他基于像素的图形设计工具中设计Android应用程序UI时遇到问题。 设计人员不知道如何将dp映射到像素。 Google也没有为他们提供清晰的Android UI设计指南,尽管它们提供了dp和像素转换的基本公式。

按照Android的定义,在160 dpi设备(mdpi)下1pd等于1px。 因此,我们要为密度为mdpi的xlarge Android设备设计一个Android应用,我们可以将像素的UI尺寸定义为宽度960像素和高度720px; 遵循相同的映射规则,我们可以获得以下Android App屏幕尺寸UI设计指南:

像素指南中的Android应用屏幕尺寸

添加 :如果您也对“灵活的” UI感兴趣,请查看以下库: 一个提供新大小单位sdp(可缩放dp)的Android SDK。 这个大小单位与屏幕大小成比例 (在有关SDP库的答案中也提到了这一点)

ADDED2 Google终于了解了iOS Storeboard UI概念的实用性,下面是适用于Android世界的ConstraintLayout使用ConstraintLayout构建响应式UI


#25楼

请阅读社区维基的答案。 除了上述答案外,下面提到的还有一些要考虑的信息。 大多数Android开发人员在开发应用程序时都会错过这一点,因此我补充了这些观点。

sp =比例无关像素

dp =密度无关像素

dpi =密度像素

我已经通过以上答案...找不到完全正确的答案。 sp表示文本大小,dp表示布局范围-标准。 但是,如果在大多数设备中使用不当则sp的文本大小会破坏布局

sp使用设备的文本大小,而dp使用设备密度标准的文本大小(在设备中永不更改)说100sp文本可以占用屏幕的80%或屏幕的100%,具体取决于设备中设置的字体大小

在此处输入图片说明

您也可以将sp用作布局范围,它将起作用:) 没有标准应用程序将sp用作整个文本

考虑到UX,请将sp和dp用于文本大小。

  • 不要在工具栏中的文本中使用sp(可以使用dp来为不同屏幕尺寸使用android变暗)
  • 不要在有界的小按钮,非常小的文本等中使用sp表示文本

某些人在手机中使用巨大的FONT字体以提高可读性,因此给他们小的硬编码尺寸的文本将是UX问题。 在必要时将sp用作文本,但请确保在用户更改其设置时它不会破坏布局。

同样,如果您有一个支持所有尺寸的应用程序,则添加xxxhdpi资产会大大增加应用程序的大小。 但是现在xxxhdpi电话很常见,因此我们必须至少在侧栏,工具栏和底部栏中包含xxxhdpi资产。 最好转移到矢量图像,以在所有屏幕尺寸上获得统一且质量更好的图像。

另请注意,人们在手机中使用自定义字体。 因此,缺少字体会导致间距和全部问题。 说自定义字体的文本大小12sp可能比默认字体多花一些像素。

请参阅google开发者网站,了解有关Android的屏幕密度和基于强度的详细信息。 https://developer.android.com/training/multiscreen/screendensities


#26楼

sp:独立于比例的像素

您应该将其与文本一起使用,因为它会根据用户在其设备中使用的字体大小自动缩放。

px:像素或图片元素是屏幕上的单点


#27楼

SDP-可缩放的尺寸单位-基本上不是单位,而是不同屏幕尺寸的尺寸资源。

试试Intuit的sdp库。 解决单位问题非常方便,您可以快速支持多个屏幕

用法

android:paddingBottom="@dimen/_15sdp"表示肯定,而android:layout_marginTop="@dimen/_minus10sdp"表示否定sdp sdp

对于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页面


#28楼

手机的屏幕由数千个称为像素(px)的小点组成。 像素是制作图片的最小元素。 用来制作图片或文字的像素数量越多,它变得越清晰,并使智能手机的屏幕更易于阅读。

屏幕分辨率是根据屏幕上的像素数来衡量的。 屏幕分辨率是购买设备时常用的规格,但实际上在设计Android时并没有多大用处,因为以像素为单位来考虑屏幕会忽略物理尺寸的概念,这对于触摸设备而言确实非常重要。

与密度无关的像素(dp或dip)使设计人员可以创建以预期方式显示的资产,无论目标设备的分辨率或密度如何。

与密度无关的像素(dp或dip)等于基线密度或160 dpi(每英寸点数)下的一个像素。

1 px / 1dp = 160 dpi / 160 dpi

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

哪里,

dpi是每英寸点数

因此,在320 dpi时,1 dp等于2 px。

px / dp = dpi / 160dpi

每英寸点数(dpi)是显示屏上清晰度(即照明点的密度)的度量。 给定图片分辨率的每英寸点数将基于整个屏幕尺寸而有所不同,因为相同数量的像素分布在不同的空间上。

使用与密度无关的像素可以帮助我们处理这样的情况,例如您拥有两个具有相同像素分辨率但空间量不同的设备。 假设在某种情况下,平板电脑和手机的像素分辨率分别为1280 x 800像素(160 dpi)和800 x 1280像素(320 dpi)。

现在,由于平板电脑处于基准密度(160 dpi),因此其物理和与密度无关的像素大小相同,为1280 x800。另一方面,手机具有更高的像素密度,因此其与密度无关的像素数量是物理像素的一半。像素。 因此,一部电话具有400 x 640密度独立像素。 因此,使用与密度无关的像素,可以使人更容易想到平板电脑比手机具有更多的空间。

同样,如果您有两台设备的屏幕尺寸相似,但像素密度不同,例如,一台设备为800 x 1280像素(320 dpi),另一台设备为400 x 640像素(160 dpi),则无需完全定义这两种设备的布局不同,因为我们可以根据密度独立像素来衡量资产,这对于两种设备而言都是相同的。

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乘以16。

如果使用dp作为字体大小单位,则无论用户是否自定义设备的字体大小,该文本都具有特定的物理大小。 使用sp单位将为视力障碍的人带来更好的体验。

参考Udacity ,谷歌


#29楼

在回答这个问题之前,让我先减少单位数量。 因此,在这里您可以使用: dp或dip都相同,并且被称为与密度无关的像素

1. px-代表像素。 像素是屏幕上的一个点。 通常,在移动行业中,以ppi(每英寸像素)为单位进行测量。 屏幕分辨率与ppi成正比,每英寸的像素数越大,屏幕分辨率越高。

例如,如果绘制大小为200 px * 200 px的图像,则高分辨率设备与低分辨率设备上的外观必须有所不同。 原因是低分辨率手机上的200像素图像看起来比高分辨率设备上的图像大。

下图显示了不同手机上相同图像的分辨率-

  • 高分辨率手机

    在此处输入图片说明

  • 屏幕分辨率低的手机

    在此处输入图片说明

2. dip或dp-基于屏幕物理密度的抽象单位。 这些单位是相对于160 dpi屏幕的,因此1 dp是160 dpi屏幕上的一个像素。 dp与像素的比率将随屏幕密度而变化,但不一定成正比。 “密度独立性”是指UI元素在具有不同密度的屏幕上的均匀显示。

  • 显示80px(左侧图像)80 dp(右侧图像)的图像 。 结帐差异。

在此处输入图片说明

dp等于屏幕上密度为160的一个物理像素。 要计算dp:

dp =(像素宽度* 160)/屏幕密度

3. sp-代表可缩放像素。 通常, sp用于UI上的文本,并且sp保留字体设置。 例如,如果用户选择的字体大于30 sp ,它将根据用户的喜好自动缩放以显示较大的字体。


#30楼

关于此的几乎所有内容,以及如何为不同尺寸和密度的多个屏幕提供最佳支持,在此处都有很好的记录:

屏幕尺寸
实际物理尺寸,以屏幕的对角线为单位。 为简单起见,Android将所有实际屏幕尺寸分为四个通用尺寸:小,普通,大和特大。

屏幕密度
屏幕物理区域内的像素数; 通常称为dpi(每英寸点数)。 例如,与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定的物理区域内具有较少的像素。 为简单起见,Android将所有实际屏幕密度分为六种广义密度:低,中,高,超高,超高和超高。

取向
从用户的角度看屏幕的方向。 这可以是横向或纵向,这意味着屏幕的宽高比分别为宽或高。 请注意,默认情况下,不同的设备不仅会以不同的方向运行,而且在用户旋转设备时,其方向可能会在运行时发生变化。

解析度
屏幕上的物理像素总数。 添加对多屏幕的支持时,应用程序无法直接使用分辨率工作; 应用程序应仅关注屏幕尺寸和密度,这由广义尺寸和密度组指定。

密度无关像素(dp)
在定义UI布局时应使用的虚拟像素单位,以密度独立的方式表示布局尺寸或位置。 与密度无关的像素等效于160 dpi屏幕上的一个物理像素,这是系统为“中”密度屏幕假定的基线密度。 在运行时,系统会根据使用中屏幕的实际密度,根据需要透明地处理dp单位的任何缩放比例。 dp单位到屏幕像素的转换很简单: px = dp * (dpi / 160) 。 例如,在240 dpi屏幕上,1 dp等于1.5物理像素。 定义应用程序的UI时,应始终使用dp单位,以确保在具有不同密度的屏幕上正确显示UI。

如果您打算针对一种以上类型的设备开发Android应用程序,则应至少阅读一次屏幕支持开发文档。 除此之外,了解具有特定屏幕配置的活动设备的实际数量总是一件好事。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值