1、px和pt
px表示像素,也就是屏幕中可以显示的最小元素单元。我们应用里任何可见的东西都是由一个个像素点组成的。单独一个像素点非常的微小,肉眼是无法看见的,可是当许许多多的像素点聚集到一起时,就可以拼接成五彩缤纷的图案。
pt是磅数,一磅约等于1/72英寸,一般作为字体的单位使用。
在PC上的时候,px和pt使用得心应手,但是由于手机的分辨率各不相同,相同的px在分辨率小的手机上比较合适的,在分辨率大的手机上就会显得比较小。(前提:两个手机一样大)
2、dp和sp
dp 是密度无关像素的意思,也被称作dip,和px 相比,它在不同密度的屏幕中的显示比例将保持一致。
sp 是可伸缩像素的意思,它采用了和dp 同样的设计理念,解决了文字大小的适配问题。
那么相同的dp是怎么保证显示效果的一致呢?这里要谈到另一个概念:dpi(屏幕每英寸包含的像素数),比如一个手机屏幕的宽是2 英寸长是3 英寸,如果它的分辨率是320*480 像素,那这个屏幕的密度就是160dpi,如果它的分辨率是640*960,那这个屏幕的密度就是320dpi,因此密度值越高的屏幕显示的效果就越精细。
所以dp*dpi才是显示到手机的像素数。dpi高的手机,需要更多的像素才能达到相同的效果。
通过下面的代码可以显示手机的dpi:
float xdpi = getResources().getDisplayMetrics().xdpi;
float ydpi = getResources().getDisplayMetrics().ydpi;
根据Android 的规定,在160dpi 的屏幕上,1dp 等于1px,而在320dpi 的屏幕上,1dp就等于2px。因此,使用dp 来指定控件的宽和高,就可以保证控件在不同密度的屏幕中的显示比例保持一致。
所以对于我现在正在调试的手机来说,指定宽度为200dp和200*3/2=300px的效果应该是一样的。测试代码如下:
<LinearLayout android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical">
<Button android:layout_width="300px" android:layout_height="wrap_content"
android:text="button1"/>
<Button android:layout_width="200dp" android:layout_height="wrap_content"
android:text="button2"/>
</LinearLayout>
实际效果如下: