您的位置:首页 > 移动开发 > Android开发

android px、dp(dip)、dpi基本概念及之间的关系

2015-09-28 11:38 363 查看
1、 屏幕相关概念

1.1分辨率 (PX)

是指屏幕上有横竖各有多少个像素 :如:手机分辨率720X1280 宽像素720px 长像素:1280px

1.2屏幕尺寸 (屏幕对角线)

指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸

android将屏幕大小分为四个级别(small,normal,large,and
extra large)。

1.3屏幕密度 (DPI)

每英寸像素数

手机可以有相同的分辨率,但屏幕尺寸可以不相同,

Diagonalpixel表示对角线的像素值(=),DPI=933/3.7=252

android将实际的屏幕密度分为四个通用尺寸(low,medium,high,andextra high)

一般情况下的普通屏幕:

ldpi是120dpi,

mdpi是160dpi,

hdpi是240dpi,

xhdpi是320dpi

如QVGA(240x320)

drawable-mdpi:中等分辨率的图片,如HVGA
(320x480)

drawable-hdpi:高分辨率的图片,如WVGA
(480x800),FWVGA (480x854)

drawable-xhdpi:至少960dp x 720dp

对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚

1.4密度无关的像素(Density-independent pixel——dip) 】

dip是一种虚拟的像素单位 ,也称为dp

dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px
= dp * (dpi / 160)

当你定义应用的布局的UI时应该使用dp单位,确保UI在不同的屏幕上正确显示。

android规定160dpi手机 1dp=1px

为什么说是与密度无关的像素?

比如:在xml布局文件中layout_width=200dp

则dpi分别为:720dpi手机和320dpi,那么在720dpi上 720dpi/160dpi = x/1px = x/1dp;x=4.5px,那么在720dpi的手机上1dp=4.5px,而在320dpi,1dp=2px;这就是为什么屏幕密度值越高手机越清晰,因为同样面积,像素大小不一样:在上例200dp中,若720dpi和320dpi手机尺寸不一样一个为5寸一个为3.7寸,则720dpi是每寸720px则200dp占用的px为200dp*4.5
= 900px

即放到屏幕上,就占有的尺寸是900px/720dpi=1.25 ;而320dpi 200dp占用的px为:200dp*2 = 400px 占有屏幕的尺寸400px/320dpi=1.25;由此看出分辨率不一样的手机,dpi不一样,若手机尺寸一样,布局中用的是dp,则可能在手机上显示的长度是一样的,只不过分辨率清晰度不同,也不会变形,如果手机尺寸不一样,则在手机上显示的长度是不一样的,这就是为什么分辨率低,dpi低,尺寸大,则效果看起来特别丑的原因,清晰度也不够

至于dpi是怎么得出来的,是通过屏幕的尺寸以及不同手机像素的出来的:

在android上获取:

Display diplay = (WindowManager) ctt.getSystemService(Context.WINDOW_SERVICE).getDefaultDisplay();

DisplayMetrics mDisplayMetrics = new DisplayMetrics();

diplay.getMetrics(mDisplayMetrics);

int xdpi = mDisplayMetrics.xdpi;

int ydpi = mDisplayMetrics.ydpi;

得出xy的dpi,就可以计算出整个屏幕尺寸(屏幕对角线)dpi;

如480X800 ,长=3,宽=5 则xdpi = 480/3=160dpi ydpi = 800/5 = 160dpi

同理:字体单位sp也是与像素无关的

字体经验心得:使用dp作为字体单位,则在不同手机上字体大小是固定的,不会改变
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: