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作为字体单位,则在不同手机上字体大小是固定的,不会改变
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作为字体单位,则在不同手机上字体大小是固定的,不会改变
相关文章推荐
- android 更改USB显示名称
- android textview 点击打开facebook个人专页,如果没有则跳到浏览器显示
- Android自定义控件——自定义属性
- Android string %1$s %1$d
- Android中spinner的简单用法(1)
- Eclipse中跟踪调试Android源代码
- Android代码优化小技巧总结
- Android keystore 密码找回
- android 中的 ContentObserver (二)
- Android CheckBox 图片设置开关
- Android签名打包出现Export aborted because fatal lint errors were found的解决
- 保护Android代码(防止反编译)
- Android Monkey测试脚本
- android 双击退出应用
- Android 静态分析smail
- android混淆
- Android内容提供者(Content provider)
- Android学习路径(两)项目文件本身使用场景和文件演示
- android性能问题
- android手机刷机教程指南