Ale*_*voy 5654

来自Android开发者文档:

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


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

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

  4. PT
    -基于屏幕的物理尺寸为1/72英寸.

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

  6. sp
    Scale -independent Pixels - 这类似于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 | 
+----------------+----------------+---------------+-------------------------------+
Run Code Online (Sandbox Code Playgroud)
+---------+-------------+---------------+-------------+--------------------+
| 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      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+
Run Code Online (Sandbox Code Playgroud)

更多信息也可以在Google Design Documentation中找到.

  • 关于db/sp的一个注意事项并不是完全明显的:为这些设备进行的缩放不取决于设备的实际密度(dpi),而是取决于它所属的"桶"密度:可用桶是:120,160,240,320.这可能会导致一些问题,处理明显不同的屏幕,但相同的屏幕. (237认同)
  • 即使它们应该是同一个东西,我倾向于有很多dp的问题,而一切都很好用dip (16认同)
  • 请注意,文档不再提及"dip",只是"dp",尽管编译器似乎仍然接受"dip". (13认同)
  • @android_developer(上面的5条评论)`dp`确实**不具有完全相同的物理长度.(虽然它很接近.)请参阅@ Fraggle关于bucketing的评论.这意味着48dp大约是8mm(0.3英寸),但它可能会变化到11mm. (11认同)
  • 分拆的原因是开发人员可以在几个不同密度的设备上测试他们的应用程序,并确信布局在多种设备上看起来相同.因此,即使按钮等的物理尺寸稍有变化,活动的整体外观也会相同. (9认同)

Bru*_*ser 672

几乎所有这些以及如何获得对不同尺寸和密度的多个屏幕的最佳支持在这里都有很好的记录:

屏幕尺寸
实际物理尺寸,以屏幕对角线测量.为简单起见,Android将所有实际屏幕尺寸分为四种通用尺寸:小尺寸,普通尺寸,大尺寸和超大尺寸.

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

方向
从用户的角度看屏幕的方向.这可以是横向或纵向,这意味着屏幕的宽高比分别为宽或高.请注意,默认情况下,不仅不同的设备在不同的方向上运行,但是当用户旋转设备时,方向可以在运行时更改.

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

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

如果您对为多种类型的设备开发Android应用程序有任何认真态度,您应该至少阅读一次屏幕支持开发文档.除此之外,了解具有特定屏幕配置的活动设备的实际数量始终是一件好事.

  • 因此,如果您使用dp作为按钮而sp使用按钮文本的字体大小,那么当用户开始缩放时会发生什么?文字会放大,但按钮是否会通过放大来容纳这个? (41认同)
  • @Wytze和我相反,使用sp作为文本及其包含的内容.例如,如果我有一个固定大小的按钮并且里面有文本,我会在sp中指定按钮大小,以便在需要时进行扩展.否则,用户会因为增加文本的大小而烦恼,并且没有增加.当然,布局应该足够灵活以允许它. (12认同)
  • @Wytze,不.对于适合文本可能是一个问题的事情,我会使用dip,所以事情不会溢出. (11认同)
  • 如果您的设计人员不会为基于文本的元素留出空间来根据sp大小进行缩放,则一种选择是切换到用于较窄设备的任何布局,然后按(DisplayMetrics.scaledDensity / DisplayMetrics统一缩放所有内容。密度)。 (2认同)

dev*_*com 338

我将详细说明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

  • 我们如何计算hdpi,ldpi,mdpi等的像素.我听说我们使用这个公式..px = dp*(dpi/160); 你能用这个公式来解释我吗? (2认同)

小智 277

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

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

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

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

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

sp -Scale-independent Pixels - 这就像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
Run Code Online (Sandbox Code Playgroud)


Saz*_*han 224

此外,您应该清楚地了解以下概念:

屏幕尺寸:

实际物理尺寸,以屏幕对角线测量.为简单起见,Android将所有实际屏幕尺寸分为四种通用尺寸:小尺寸,普通尺寸,大尺寸和超大尺寸.

屏幕密度:

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

取向:

从用户的角度看屏幕的方向.这可以是横向或纵向,这意味着屏幕的宽高比分别为宽或高.请注意,默认情况下,不仅不同的设备在不同的方向上运行,但是当用户旋转设备时,方向可以在运行时更改.

解析度:

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

密度无关像素(dp):

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

参考:Android开发者网站


Min*_*iel 194

dpdip.用于所有事情(边距,填充等).

使用sp了{文字大小}只.


为了在不同的屏幕密度上获得相同的大小,Android会在运行时将这些单位转换为像素,因此您无需进行棘手的数学运算.


见之间的差异px,dp以及sp在不同的屏幕尺寸.

在此输入图像描述

来源:Android编程:大书呆子牧场指南


cha*_*nya 140

我已经计算了下面的公式来转换dpidpsp 在此输入图像描述

  • 它应该是ppi而不是dpi (10认同)

rds*_*rds 136

定义

px或dot是物理屏幕上的一个像素.

dpi是物理屏幕上的每英寸像素数,表示显示器的密度.

Android为多个密度提供别名

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

dipdp密度依赖的像素,即它们根据物理密度对应于更多或更少的像素.

  • mdpi上1dp = 1px

在此输入图像描述

spsip是一个与比例无关的像素.在>中打开" 大文本"选项时,它们会缩放SettingsAccessibility

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

用什么?

使用sp表示文本大小.

dp用于其他一切.


sms*_*247 125

来源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英寸.

PX

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

毫米

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

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

注意:维度是使用name属性中提供的值(而不是XML文件的名称)引用的简单资源.因此,您可以将维度资源与一个XML文件中的其他简单资源组合在一个元素下.

  • 另外:这个答案的附加价值是多少?似乎没有任何其他答案中没有提到的东西. (9认同)

Joe*_*nte 113

基本上px应用的唯一时间是一个px,如果你想在屏幕上只有一个像素,就像分频器一样:

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

在> 120 dpi时,它将舍入为0.


Nir*_*ara 97

PX

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

dp或dip

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

使用dp:

密度独立性 - 当您的应用程序在具有不同密度的屏幕上显示时,保留用户界面元素的物理大小(从用户的角度来看),从而实现"密度独立性".(即)图像在不同类型的屏幕中看起来应该相同(不放大或缩小).

SP

与比例无关的像素 - 这与dp单位类似,但它也可以根据用户的字体大小首选项进行缩放.

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


小智 94

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

密度无关像素(dp)

在定义UI布局时应使用的虚拟像素单元,以与密度无关的方式表达布局尺寸或位置.如上所述,与密度无关的像素相当于160dpi屏幕上的一个物理像素,这是系统为"中"密度屏幕假定的基线密度.在运行时,系统根据所使用屏幕的实际密度,根据需要透明地处理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
Run Code Online (Sandbox Code Playgroud)
  • 尝试从广告素材小组获取偶数的所有像素值.否则在乘以0.5时会发生精度损失.

PX

如上所述.尽量避免在布局文件中.但在某些情况下,需要px.例如,ListView分隔线.对于所有跨屏幕分辨率,px更适合为一个像素线作为分频器.

SP

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


Zep*_*hyr 86

你可以看到之间的差异px,并dp从下面的图片,你也可以发现pxdp不能保证在不同的屏幕相同的物理尺寸.

在此输入图像描述

  • @EnesBattal,我认为因为dp不是一个急剧的物理尺寸,它是一个近似值.引自CapTech:"dp - 这是一个与密度无关的单元,但是单个"dp"的物理尺寸在每个屏幕密度上大致相同.一英寸大约有160"dp".比例因子,取决于在设备的密度桶上,应用于将"dp"转换为160 dpi的像素数.单个"dp"转换的像素数取决于屏幕密度上的像素和设备下降的密度桶成." (3认同)
  • @RuchirBaronia,我认为DP或DIP仍然在apk里面,因为apk不知道它将运行哪种屏幕密度,所以应该仍然保持设备独立性. (3认同)

Ati*_*wal 76

任何与文字和外观大小相关的内容都必须使用sppt.然而,必须使用与控件大小,布局等相关的任何内容dp.

您可以同时使用dp,并dip在它的地方.


bha*_*ral 66

我只会用dp.

有很多关于使用"sp"表示字体大小的讨论,虽然我很欣赏这一点,但我不认为从设计的角度来看是正确的.如果用户选择了一些不稳定的字体大小,您最终可能会破坏您的设计,并且用户最终会指责应用程序,而不是他们自己的生活选择.

此外,如果您在160 dpi平板电脑上使用sp-font应用程序,您会发现所有内容都会扩展......但是您的字体相比之下看起来很小.这不是一个好看的样子.

虽然"sp"字体的想法有一颗好心,但这是一个糟糕的主意.一切都坚持使用dp.


Kus*_*hal 63

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像素.

其他密度相同......

我们作为软件工程师应该使用这个转换公式:

pixel = 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();
Run Code Online (Sandbox Code Playgroud)

  • "我们应该避免使用sp"为什么会这样?在处理字体大小时应该使用sp,因为它考虑了用户的首选文本大小,http://developer.android.com/training/multiscreen/screendensities.html (5认同)

aus*_*len 60

通过更改选项,可以在运行时查看从官方文档中复制的答案中提到的" 用户字体大小首选项 " 之间的区别dpsp单位之间的差异.Settings->Accessibility->Large Text

Large Text选项强制文本变得1.3更大.

private static final float LARGE_FONT_SCALE = 1.3f;
Run Code Online (Sandbox Code Playgroud)

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


Aru*_*dra 51

dpi -

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

px - 像素

  • 用于映射屏幕像素

pt - 分

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

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

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

sp - scale-independent pixel.

  • 基于用户的字体大小首选项.
  • 字体应该是'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  
Run Code Online (Sandbox Code Playgroud)


Dan*_*rza 44

这是Android使用的公式:

px = dp*(dpi/160)

其中dpi是以下屏幕密度之一.有关所有可能密度的列表,请转到此处

它定义了"DENSITY_*"常量.

  • ldpi(低)~120dpi
  • mdpi(中)~160dpi
  • hdpi(高)~240dpi
  • xhdpi(超高)~320dpi
  • xxhdpi(extra-extra-high)~480dpi
  • xxxhdpi(extra-extra-extra-high)~640dpi

取自这里.

如果你知道你的屏幕dpi,这将在px和dp之间进行翻译时解决很多困惑.

所以,假设您想要一个60 dp的图像用于hdpi屏幕,那么物理像素大小为60 dp是:

px = 60 * (240 / 160)
Run Code Online (Sandbox Code Playgroud)


Rav*_*ela 44

屏幕尺寸Android被分为不同的类别small,medium,large,extra large,double-extratriple-extra.屏幕密度是屏幕区域(如英寸)内的像素数量.通常,它以每英寸点数(dpi)来衡量.屏幕密度分为低,中,高和超高.分辨率是屏幕中的总像素数.

  • dp:密度独立像素,它根据屏幕密度而变化.在160 dpi屏幕中,1 dp = 1像素.除字体大小外,请始终使用dp.
  • dip: dip == dp.在早期的Android版本中,使用了dip,后来更改为dp.
  • sp: Scale Independent Pixel,根据用户的字体大小首选项进行缩放.字体应该使用sp.
  • px:我们通常的标准像素,映射到屏幕像素.
  • in:英寸,相对于物理屏幕尺寸.
  • 毫米:毫米,相对于物理屏幕尺寸.
  • pt: 1/72英寸,相对于物理屏幕尺寸.

单位之间转换公式

 px = dp * (dpi / 160)
Run Code Online (Sandbox Code Playgroud)

dp到设备中的px

以下示例有助于更好地理解.基于桶大小120(ldpi),160(mdpi),240(hdpi),320(xhdpi),480(xxhdpi)和640(xxxhdpi)进行缩放.对于ldpi,谷歌建议的设计比例为3:4:6:8:12:mdpi:hdpi:xhdpi:xxhdpi

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);        
   }
}
Run Code Online (Sandbox Code Playgroud)

更多信息请参阅以下链接.

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


shi*_*jin 44

请阅读社区维基的答案.下面提到的是除上述答案之外还需要考虑的一些信息.

sp =与尺度无关的像素

dp =密度独立像素

dpi =密度像素

我已经完成了上述答案......没有找到完全正确的答案.sp表示文本大小,dp表示布局边界 - 标准.但是,如果在大多数设备中不小心使用,文本大小的sp将破坏布局.

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

在此输入图像描述

您也可以使用sp作为布局边界,它将起作用:) 没有标准的应用程序使用sp作为整个文本

考虑到UX,使用sp和dp作为文本大小.

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

有些人在手机中使用巨大的FONT尺寸以提高可读性,给他们提供小的硬编码文本将是UX问题.在必要时将sp放入文本,但请确保它不会破坏布局.

同样,如果您有一个支持所有维度的应用程序,添加xxxhdpi资产会大大增加应用程序的大小.但是现在xxxhdpi手机很常见,所以我们必须至少包含侧边栏,工具栏和底栏中的图标的xxxhdpi资产.最好转移到矢量图像,以便为所有屏幕尺寸提供统一且质量更好的图像.

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


DPC*_*DPC 42

  • px - 一个像素,与CSS,JavaScript等中使用的像素相同.
  • sp - scale-independent像素
  • 倾角 - 密度无关的像素

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


Mix*_*xaz 38

我发现了一篇关于为不同的屏幕分辨率设计Android应用程序UI的好文章,我想留在这里只是为了在这个领域搜索的人.是的,我知道它在谷歌文档中有所描述(并在上面的帖子中提到过),我读到了,但这对我不好(是的,我可能太傻了)).我还不清楚如何设计能够处理不同屏幕尺寸的布局.当我需要为不同的屏幕实现"灵活"的UI布局时,我讨厌DP概念等等.(嘿iOS开发人员 - 是的,你是对的故事板概念).

不幸的是,Android的UI概念并不差,但缺乏iOS Storyboard功能.在Android中设计灵活的UI并不容易(最好).

这篇文章帮助我了解Android中的操作,以便为不同的屏幕尺寸制作布局:

JMSTUDIO博客: - 决定Android App屏幕尺寸

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

要为不同的屏幕尺寸设计应用程序UI,我们的初始设计必须满足每个屏幕尺寸所需的最小空间.Android为每种通用屏幕类型定义最小大小(以dp为单位).这是Android屏幕尺寸指南. Android的最小屏幕尺寸,以dp为单位 当我们以dp获得屏幕尺寸时,我们还不足以设计Android应用UI.对于每个屏幕尺寸,我们需要为每个密度准备图形和位图图像.这是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映射到像素.谷歌也没有为他们提供明确的Android用户界面设计指南,尽管他们提供了dp和像素翻译的基本公式.

作为Android的定义,1pd等于160ppi设备(mdpi)下的1px.因此,我们希望为具有mdpi密度的xlarge Android设备设计Android应用程序,我们可以将像素大小定义为像素宽度为960像素,高度为720像素; 遵循相同的映射规则,我们可以获得以下Android App屏幕尺寸UI设计指南:

像素指南中的Android App屏幕尺寸

增加:如果您对"灵活"UI感兴趣,请查看此库:提供新大小单元的Android SDK - sdp(可扩展的dp).这个尺寸单位随屏幕尺寸而变化(这也在答案中提到,关于SDP图书馆)

ADDED2 Google终于理解了iOS Storeboard UI概念的实用性,这里ConstraintLayout适用于Android世界:使用ConstraintLayout构建响应式UI


Int*_*iya 30

1) dp: (density independent pixels)

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


2) sp: (scale independent pixels)

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


3) px: (pixels)

屏幕上的实际像素或点.


有关详细信息,请访问

Android开发人员指南> Dimension
Android开发人员指南>屏幕


Raj*_*esh 29

屏幕尺寸在Android是分为不同的类别ldpi,mdpi,hdpi,xhdpi,xxhdpixxxhdpi.屏幕密度屏幕区域(如英寸)内的像素数量.通常,它以每英寸点数(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单位.A dp是与密度无关的像素,其对应于160处的像素的物理尺寸dpi.An sp是相同的基本单位,但是根据用户的首选文本大小(它是与比例无关的像素)进行缩放,因此在定义文本大小时应使用此度量单位


And*_*per 21

移动电话的屏幕由数千个称为像素(px)的小点组成.像素是制作图片的最小元素.制作图片或措辞的像素数量越多,它就越清晰,使智能手机屏幕更容易阅读.

屏幕分辨率是根据屏幕上的像素数量来衡量的.屏幕分辨率是购买设备时常用的规格,但在设计Android时实际上并没有那么有用,因为根据像素思考屏幕会忽略物理尺寸的概念,而触摸设备确实非常重要.

密度独立像素(dp或dip)允许设计人员创建以预期方式出现的资产,无论目标设备的分辨率或密度如何.

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

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×800像素(160dpi)和800×1280像素(320dpi).

现在因为平板电脑处于基线密度(160 dpi),其物理和密度无关的像素尺寸是相同的,1280乘800.另一方面,手机具有更高的像素密度,因此其密度独立像素的数量是物理密度的一半.像素.因此,手机具有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,谷歌


小智 18

sp:与尺度无关的像素

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

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


lav*_*ava 17

像素密度

屏幕像素密度和分辨率因平台而异.与设备无关的像素和可伸缩像素是提供跨平台适应设计的灵活方式的单元.

计算像素密度

适合一英寸的像素数称为像素密度.高密度屏幕每英寸像素数低于低密度屏幕....

适合一英寸的像素数称为像素密度.高密度屏幕每英寸像素数低于低密度屏幕.因此,相同像素尺寸的UI元素在低密度屏幕上显得更大,而在高密度屏幕上显得更小.

要计算屏幕密度,您可以使用以下等式:

屏幕密度=屏幕宽度(或高度),以像素为单位/屏幕宽度(或高度),以英寸为单位

高密度与低密度显示

密度独立性

屏幕像素密度和分辨率因平台而异.与设备无关的像素和可伸缩像素是提供跨平台适应设计的灵活方式的单元.

计算像素密度适合一英寸的像素数称为像素密度.高密度屏幕每英寸像素数低于低密度屏幕....

密度独立性是指在具有不同密度的屏幕上统一显示UI元素.

与密度无关的像素,写为dp(发音为" dips "),是灵活的单位,可在任何屏幕上缩放以具有统一的尺寸.材质UI使用与密度无关的像素在具有不同密度的屏幕上一致地显示元素.

  1. 显示低密度屏幕,密度独立
  2. 显示密度独立的高密度屏幕

阅读全文 https://material.io/design/layout/density-resolution.html#pixel-density


Pro*_*tle 14

我想提供一种简单的方法来理解dp.事实上,我认为这dp是最容易理解的.dp只是一个物理长度单位.它和mmor的尺寸相同inch.这对我们来说只是方便50dp,60dp而不是50/160 inch或者60/160 inch,因为一个dp1/160 inch屏幕尺寸或分辨率.

唯一的问题是,某些屏幕的android dpi不准确.例如,分类为160dpi的屏幕确实可以具有170dpi.因此计算结果dp是模糊的.它应该大致相同1/160 inch.


Rah*_*hul 14

在回答这个问题之前,让我先减少单位数量.所以这里你去:dp或dip都是相同的,并且被称为与密度无关的像素.

1. px - 代表像素.像素是一个点,在屏幕上指向.通常在移动行业中,它以ppi(每英寸像素数)来度量.屏幕分辨率与ppi成正比,每英寸像素数越大,屏幕分辨率越高.

例如,如果您绘制的尺寸为200像素*200像素的图像,则其高分辨率设备与低分辨率设备的外观必须不同.原因是低分辨率手机上的200像素图像看起来比高分辨率设备上的图像大.

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

  • 具有高屏幕分辨率的手机

    在此输入图像描述

  • 手机屏幕分辨率低

    在此输入图像描述

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

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

在此输入图像描述

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

dp =(宽度,以像素为单位*160)/屏幕密度

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


Qam*_*mar 13

SDP - 可扩展的大小单元 - 基本上它不是一个单元,而是用于不同屏幕尺寸的尺寸资源.

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

用法

android:paddingBottom="@dimen/_15sdp"对于正面和android:layout_marginTop="@dimen/_minus10sdp" 负面的sdp sdp

对于values-sw<N>dp文件夹中的每个大小,它在dp中具有等效值(sw = smallestWidth).

注意

小心使用!在大多数情况下,您仍需要为平板电脑设计不同的布局.

<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>
Run Code Online (Sandbox Code Playgroud)

您可以使用db作为文本大小,但我更喜欢使用ssp作为文本大小.

有关更多详细信息,请查看库GitHub页面.


小智 9

像素(px) - 对应于屏幕上的实际像素.如果要根据宽度或高度的绝对像素给出,则使用此选项.

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

与比例无关的像素(sp) - 这与dp单位类似,但它也可以根据用户的字体大小首选项进行缩放.建议您在指定字体大小时使用此单位,以便根据屏幕密度和用户偏好调整它们.

始终只使用dp和sp.sp表示字体大小,dp表示其他所有内容.它将使UI与具有不同密度的Android设备兼容.您可以从https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-了解有关pixel和dp的更多信息.

来源网址: - http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/


Nar*_*iya 8

dp与像素的比率将随着屏幕密度而变化,但不一定是成正比的.

注意:编译器接受" dip "和" dp ",但" dp "与" sp " 更一致.

与比例无关的像素 - 这与dp单位类似,但它也可以根据用户的字体大小首选项进行缩放.