Android度量单位有什么区别?
- 像素
- 蘸
- dp
- SP
Android度量单位有什么区别?
Answers:
来自Android开发者文档:
px
像素 -对应于屏幕上的实际像素。
以
英寸为单位 -基于屏幕的物理尺寸。
1英寸= 2.54厘米
毫米
毫米 -基于屏幕的物理尺寸。
pt
点 -基于屏幕的物理尺寸的1/72英寸。
dp或dip
密度独立像素-基于屏幕物理密度的抽象单位。这些单位是相对于160 dpi屏幕的,因此1 dp是160 dpi屏幕上的一个像素。dp与像素的比率将随屏幕密度而变化,但不一定成正比。注意:尽管“ dp”与“ sp”更一致,但编译器接受“ dip”和“ dp”。
sp
Scale -independent Pixels-类似于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设计文档中找到。
dp
也不会具有完全相同的物理长度。(尽管它很接近。)请参阅@Fraggle关于存储的评论。这意味着48dp大约为8毫米(0.3英寸),但最大可能变化到11毫米。
关于此的几乎所有内容,以及如何为不同尺寸和密度的多个屏幕提供最佳支持,在此处都有很好的记录:
屏幕尺寸
实际物理尺寸,以屏幕的对角线为单位。为简单起见,Android将所有实际屏幕尺寸分为四个通用尺寸:小,普通,大和特大。屏幕密度屏幕
物理区域内的像素数;即,像素数。通常称为dpi(每英寸点数)。例如,与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定的物理区域内具有较少的像素。为简单起见,Android将所有实际的屏幕密度分为六个广义的密度:低,中,高,超高,超高和超超高。方向
从用户的角度看屏幕的方向。这可以是横向或纵向,这意味着屏幕的宽高比分别为宽或高。请注意,默认情况下,不同的设备不仅会以不同的方向运行,而且在用户旋转设备时,其方向可能会在运行时发生变化。分辨率
屏幕上的物理像素总数。添加对多屏幕的支持时,应用程序无法直接使用分辨率工作;应用程序应仅关注屏幕尺寸和密度,这由广义尺寸和密度组指定。与密度无关的像素(dp)
在定义UI布局时应使用的虚拟像素单位,以与密度无关的方式表示布局尺寸或位置。与密度无关的像素等效于160 dpi屏幕上的一个物理像素,这是系统为“中”密度屏幕假定的基线密度。在运行时,系统会根据使用中屏幕的实际密度,根据需要透明地处理dp单位的任何缩放比例。dp单位到屏幕像素的转换很简单:px = dp * (dpi / 160)
。例如,在240 dpi屏幕上,1 dp等于1.5物理像素。定义应用程序的UI时,应始终使用dp单位,以确保在具有不同密度的屏幕上正确显示UI。
如果您打算针对一种以上类型的设备开发Android应用程序,则应至少阅读一次屏幕支持开发文档。除此之外,了解具有特定屏幕配置的活动设备的实际数量总是一件好事。
我将详细说明dp如何精确转换为px:
150 x 150 px
图像将占用150 * 150 dp
屏幕空间。150 x 150 px
图像将占用100 * 100 dp
屏幕空间。150x150 px
图像将占用75 * 75 dp
屏幕空间。另一种方法是:说,您想向应用程序中添加图像,并且需要它来填充100 * 100 dp
控件。您需要为支持的屏幕尺寸创建不同尺寸的图像:
100 * 100 px
mdpi的图像150 * 150 px
hdpi的图像200 * 200 px
xhdpi的图像px-像素 -每刻度点数对应于屏幕上的实际像素。
i-英寸 -基于屏幕的物理尺寸。
毫米-毫米 -基于屏幕的物理尺寸。
pt-点 -基于屏幕的物理尺寸的1/72英寸。
dp-密度无关像素 -基于屏幕物理密度的抽象单位。这些单位是相对于160 dpi屏幕的,因此一个dp
是160 dpi屏幕上的一个像素。dp与像素的比率将随屏幕密度而变化,但不一定成正比。注意:编译器接受dip
和dp
,尽管dp
与比较一致sp
。
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
此外,您应该对以下概念有清楚的了解:
屏幕尺寸:
实际物理尺寸,以屏幕的对角线为单位。为简单起见,Android将所有实际屏幕尺寸分为四个通用尺寸:小,普通,大和特大。
屏幕密度:
屏幕物理区域内的像素数量;通常称为dpi(每英寸点数)。例如,与“正常”或“高”密度屏幕相比,“低”密度屏幕在给定的物理区域内具有较少的像素。为简单起见,Android将所有实际屏幕密度分为四个广义密度:低,中,高和超高。
取向:
从用户的角度看屏幕的方向。这可以是横向或纵向,这意味着屏幕的宽高比分别为宽或高。请注意,默认情况下,不同的设备不仅会以不同的方向运行,而且在用户旋转设备时,其方向可能会在运行时发生变化。
解析度:
屏幕上的物理像素总数。添加对多屏幕的支持时,应用程序无法直接使用分辨率工作;应用程序应仅关注屏幕尺寸和密度,这由广义尺寸和密度组指定。
密度无关像素(dp):
在定义UI布局时应使用的虚拟像素单位,以密度独立的方式表示布局尺寸或位置。与密度无关的像素等效于160 dpi屏幕上的一个物理像素,这是系统为“中”密度屏幕假定的基线密度。在运行时,系统会根据使用中屏幕的实际密度,根据需要透明地处理dp单位的任何缩放比例。dp单位到屏幕像素的转换很简单:px = dp *(dpi / 160)。例如,在240 dpi屏幕上,1 dp等于1.5物理像素。定义应用程序的UI时,应始终使用dp单位,以确保在具有不同密度的屏幕上正确显示UI。
dp
是 dip
。将其用于所有内容(边距,填充等)。
使用sp
了{文字大小}只。
见之间的差异px
,dp
以及sp
在不同的屏幕尺寸。
px或点是物理屏幕上的像素。
dpi是物理屏幕上的每英寸像素,代表显示的密度。
dip或dp是非密度像素,即取决于物理密度,它们对应于更多或更少的像素。
sp或sip是与比例无关的像素。在>中打开“ 大字体”选项时,它们会缩放SettingsAccessibility
使用sp作为文本大小。
将dp用于其他所有内容。
来源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文件中将维度资源与其他简单资源结合在一起。
基本上,适用px的唯一时间是一个px,也就是说,如果您想要在屏幕上恰好一个像素,例如使用分隔线的情况:
在> 160 dpi时,您可能会获得2-3像素,
在> 120 dpi时,其舍入为0。
像素
像素-对应于屏幕上的实际像素。
dp或dip
与密度无关的像素-基于屏幕物理密度的抽象单位。这些单位是相对于160 dpi屏幕的,因此1 dp是160 dpi屏幕上的一个像素。
使用dp:
密度独立性 -当您的应用程序以不同的密度显示在屏幕上时,保留用户界面元素的物理尺寸(从用户的角度来看),您的应用程序将实现“密度独立性”。(即)在不同类型的屏幕中,图像的尺寸应相同(不能放大或缩小)。
SP
与比例无关的像素-就像dp单位一样,但是它也通过用户的字体大小首选项进行缩放。
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
在定义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
上面已经解释了。尽量避免在布局文件中。但是在某些情况下,需要px。例如,ListView分隔线。px在这里更好,因为它提供了一个像素行作为所有屏幕分辨率的分隔线。
使用sp表示字体大小。然后,随着设备字体大小的变化(即,显示->设备上的字体),只有应用程序内部的字体才会变化。如果要在应用程序中保留静态大小的字体,可以在dp中指定字体尺寸。在这种情况下,它将永远不会改变。开发人员可能对某些特定屏幕有这样的要求,为此,开发人员可以使用dp代替sp。在所有其他情况下,建议使用sp。
你可以看到之间的差异px
,并dp
从下面的图片,你也可以发现px
并dp
不能保证在不同的屏幕相同的物理尺寸。
我只会用dp。
关于使用“ sp”表示字体大小的讨论很多,尽管我很欣赏这一点,但从设计的角度来看,我认为这样做是不正确的。如果用户选择了一些不稳定的字体大小,最终可能会破坏您的设计,而最终用户将责备该应用程序,而不是自己的生活选择。
另外,如果您在160 dpi的平板电脑上使用sp-font应用,您会发现一切都会扩大...但是您的字体相比之下显得很小。不好看。
尽管“ sp”字体的想法很不错,但这是一个糟糕的想法。坚持使用dp进行所有操作。
sp
是一个因子,对吗?任何有影响的事物dp
也会影响sp
。话虽如此,仍然优选使用来指定字体大小,dp
而不是sp
如果布局非常紧凑并且大字体不适合-最好使文本小于用户希望完全弄乱的布局。但是首先,您应该始终努力尊重用户的字体大小首选项-即使最大的设置也不是那么大。
sp =比例无关像素
dp =倾斜=密度无关像素
dpi =每英寸点数
我们应该避免使用sp。
我们应该使用dp支持多个屏幕。
Android支持不同的屏幕分辨率
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;
当然,这可能取决于供应商,因为它位于package / apps / Settings中。
dpi-
px-像素
pt-点
英寸-相对于物理屏幕尺寸(1英寸= 2.54厘米)。
毫米-相对于物理屏幕尺寸。
sp-与比例无关的像素。
浸-
在标准情况下,使用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
被分为不同的类别small
,medium
,large
,extra large
,double-extra
和triple-extra
。屏幕密度是屏幕区域(如英寸)内的像素数量。通常,它以每英寸点数(dpi)为单位进行测量。屏幕密度分为低,中,高和超高。分辨率是屏幕中的像素总数。
单位换算公式
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计算器来修复图像尺寸和其他尺寸。
/*
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/
请阅读社区维基的答案。除了上述答案外,下面提到的还有一些要考虑的信息。大多数Android开发人员在开发应用程序时都会错过这一点,因此我补充了这些观点。
sp =比例无关像素
dp =密度无关像素
dpi =密度像素
我已经通过以上答案...找不到完全正确的答案。sp表示文本大小,dp表示布局范围-标准。但是,如果在大多数设备中使用不当,则sp的文本大小会破坏布局。
sp取设备的文本大小,而dp取设备密度标准的文本大小(在设备中永不更改)说100sp文本可以占据屏幕的80%或屏幕的100%,具体取决于设备中设置的字体大小
您也可以将sp用作布局范围,它将起作用:) 没有标准应用程序将sp用作整个文本
考虑到UX,请将sp和dp用于文本大小。
有些人在手机中使用巨大的FONT字体以提高可读性,因此给他们小的硬编码大小的文本将是UX问题。在必要时将sp用作文本,但请确保在用户更改其设置时它不会破坏布局。
同样,如果您有一个支持所有尺寸的应用程序,则添加xxxhdpi资产会大大增加应用程序的大小。但是现在xxxhdpi电话很常见,因此我们必须至少在侧栏,工具栏和底部栏中包括xxxhdpi资产。最好转移到矢量图像,以在所有屏幕尺寸上获得统一且质量更好的图像。
另请注意,人们在手机中使用自定义字体。因此,缺少字体会导致间距和全部问题。说自定义字体的文本大小12sp可能比默认字体多花一些像素。
请参阅google开发者网站,了解有关Android的屏幕密度和基于强度的详细信息。 https://developer.android.com/training/multiscreen/screendensities
我见过一篇不错的文章,关于为不同的屏幕分辨率设计Android应用程序UI,我想把它留在这里仅供那些在该领域搜索的人使用。是的,我知道它在Google文档中有所描述(并在上面的帖子中提到),我读过,但这对我不好(是的,我可能太愚蠢了))。我仍然不清楚如何设计能够处理不同屏幕尺寸的布局。当我需要为不同的屏幕实现“灵活的” UI布局时,我讨厌DP概念。(嘿,iOS开发人员-是的,您说对了,这就是Storyboard的概念)。
Android的UI概念不错,但不幸的是缺少iOS Storyboard功能。在Android中设计灵活的UI绝非易事(最好)。
这里有一篇文章,它帮助我了解了如何在Android中为不同的屏幕尺寸制作布局:
JMSTUDIO博客:-确定Android应用程序的屏幕大小
如何为不同屏幕尺寸的Android应用程序设计UI
为了设计用于不同屏幕尺寸的应用程序用户界面,我们的初始设计必须满足每种屏幕尺寸所需的最小空间。Android为每种广义屏幕类型定义了最小尺寸(以dp为单位)。这是Android屏幕尺寸指南。 当我们获得以dp为单位的屏幕尺寸时,仅设计Android应用程序用户界面还不够。对于每种屏幕尺寸,我们需要为每种密度准备图形和位图图像。这是Android屏幕密度指南。
为了便于计算,我们可以遵循四个广义密度之间的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设计指南:
添加:如果您也对“灵活的” UI感兴趣,请查看以下库:一个提供新大小单位sdp(可缩放dp)的Android SDK。此大小单位与屏幕大小成比例(在有关SDP
库的答案中也提到了这一点)
ADDED2 Google终于了解了iOS Storeboard UI概念的实用性,适用ConstraintLayout
于Android世界:使用ConstraintLayout构建响应式UI
1) dp: (density independent pixels)
随着屏幕分辨率的提高(当每英寸有更多点/像素时),以dp为单位表示的像素数将增加。相反,在分辨率较低的设备上,以dp为单位表示的像素数将减少。由于这是一个相对单位,因此需要有一个比较基准。此基准是160 dpi的屏幕。这是等式:px = dp * (dpi / 160).
2) sp: (scale independent pixels)
该单位根据屏幕dpi(类似于dp)以及用户的字体大小首选项进行缩放。
3) px: (pixels)
屏幕上的实际像素或点。
有关更多详细信息,您可以访问
屏幕尺寸在Android是分为不同的类别ldpi
,mdpi
,hdpi
,xhdpi
,xxhdpi
和xxxhdpi
。屏幕密度是屏幕区域(如英寸)内的像素数量。通常,它以每英寸点数(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
单位。Adp
是与密度无关的像素,它与160处的像素的物理尺寸相对应dpi
。Ansp
是相同的基本单位,但会根据用户的首选文本大小进行缩放(这是与缩放无关的像素),因此在定义文本大小时应使用此度量单位
手机的屏幕由数千个称为像素(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,谷歌
屏幕像素密度和分辨率因平台而异。与设备无关的像素和可缩放像素是提供跨平台适应设计的灵活方式的单元。
适合英寸的像素数称为像素密度。高密度屏幕每英寸的像素多于低密度屏幕.....
适合英寸的像素数称为像素密度。高密度屏幕每英寸具有比低密度屏幕更多的像素。结果,相同像素尺寸的UI元素在低密度屏幕上显得较大,而在高密度屏幕上则较小。
要计算屏幕密度,可以使用以下公式:
屏幕密度=屏幕宽度(或高度)(以像素为单位)/屏幕宽度(或高度)(以英寸为单位)
屏幕像素密度和分辨率因平台而异。与设备无关的像素和可缩放像素是提供跨平台适应设计的灵活方式的单元。
计算像素密度将适合英寸的像素数称为像素密度。高密度屏幕每英寸的像素多于低密度屏幕.....
密度独立是指UI元素在具有不同密度的屏幕上的均匀显示。
与密度无关的像素,记为dp(读作“ dip ”),是可伸缩的单位,可以缩放以在任何屏幕上具有统一的尺寸。材质UI使用与密度无关的像素,以不同密度在屏幕上一致地显示元素。
Pixels(px) –对应屏幕上的实际像素。如果要给出宽度或高度的绝对像素,则使用此选项。
与密度无关的像素(dp或dip) –基于屏幕物理密度的抽象单位。这些单位是相对于160 dpi屏幕的,因此1 dp是160 dpi屏幕上的一个像素。dp与像素的比率将随屏幕密度而变化,但不一定成正比。注意:尽管“ dp”与“ sp”更一致,但编译器接受“ dip”和“ dp”。
与比例无关的像素(sp) –类似于dp单位,但也通过用户的字体大小首选项进行缩放。建议您在指定字体大小时使用本机,以便针对屏幕密度和用户喜好进行调整。
始终仅使用dp和sp。sp表示字体大小,dp表示其他所有内容。它将使UI兼容具有不同密度的Android设备。您可以从https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-了解更多有关像素和dp的信息
来源网址:http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/