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作为字体单位,则在不同手机上字体大小是固定的,不会改变