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

Android视觉规范-间距规范与文字规范单位换算(dip、sp与px)

2013-01-24 15:13 387 查看
引用自:点击打开链接

1、dip与px

Android工程师在写页面时,margin值的单位是dip,而视觉设计师通常情况下是通过px来控制margin值的,不同单位之间的差别是什么呢?看下面的参数。

 

在WVGA(800x480)下dip与px之间的视觉测算结果: 
1dip=2px
9dip=14px
17dip=26px
2dip=3px
10dip=15px
18dip=27px
3dip=5px
11dip=17px
19dip=29px
4dip=6px
12dip=18px
20dip=30px
5dip=8px
13dip=20px
21dip=31px
6dip=9px
14dip=21px
 
7dip=11px
15dip=23px
 
8dip=12px
16dip=24px
 
根据上述数值可以得出一个在WVGA下dip与px的换算公式(2N代表任意偶数,2N-1代表小与偶数1的奇数):

 dip与px之间的换算公式:

a. 2N + 2N/2 = PX

b.(2N-1)+
2N/2 = PX

注:偶数值dip 的1.5倍等于相对应的px值,偶数值的间距与奇数元素设置居中对齐的时候会有1px的误差,仔细看可能会不是很美观(如下图)。

 



A与B居中对齐时有一个值的差,C与D可以完美居中对齐。

但是这种情况发生的几率还是非常小的,只有在细扣页面的时候常见到,遇到时应急处理一下也可以解决问题,但是如果在一开始设计时就注意了的话,后面细扣也不会出现问题的,也就省去了应急处理的时间,在一定程度上可以提高效率。

 

在HVGA(320x480)下dip与px之间的视觉测算结果:
1dip=1px
9dip=9px
17dip=17px
2dip=2px
10dip=10px
18dip=18px
3dip=3px
11dip=11px
19dip=19px
4dip=4px
12dip=12px
20dip=20px
5dip=5px
13dip=13px
21dip=21px
6dip=6px
14dip=14px
 
7dip=7px
15dip=15px
 
8dip=8px
16dip=16px
 
根据上述参数得出的结果是dip值等于px值。

由上述得出,视觉设计师在WVGA(480x800)模式下设计,建议最佳间距是:12px、18px、24px、30px、36px、42px、48px,由于dip、px值在HVGA\WVGA
对应的都是偶数,各个元素能做到最严格的对齐。

二、sp与px

在WVGA(800x480)下sp与px之间的视觉测算结果:
7sp=11px
15sp=23px
23sp=35px
8sp=12px
16sp=24px
24sp=36px
9sp=14px
17sp=26px
25sp=38px
10sp=15px
18sp=27px
26sp=39px
11sp=17px
19sp=29px
27sp=41px
12sp=18px
20sp=30px
28sp=42px
13sp=20px
21sp=31px
29sp=44px
14sp=21px
22sp=33px
30sp=45px
根据上述参数得出的结果:

sp与px之间的换算公式与dip与px的换算公式相同:

a. 2N + 2N/2 = PX

b.(2N-1)+
2N/2 = PX

在HVGA(320x480)下sp与px之间的换算结果:
7sp=7px
15sp=15px
23sp=23px
8sp=8px
16sp=16px
24sp=24px
9sp=9px
17sp=17px
25sp=25px
10sp=10px
18sp=18px
26sp=26px
11sp=11px
19sp=19px
27sp=27px
12sp=12px
20sp=20px
28sp=28px
13sp=13px
21sp=21px
29sp=29px
14sp=14px
22sp=22px
30sp=30px
根据上述参数得出的结果是sp值等于px值。

由上述得出,视觉设计师在WVGA(480x800)模式下设计,建议常用最佳字号是:18px、24px、30px、36px、42px,在一些需要严格对齐的位置,这几个参数的文字是不会出问题的,当然其他的字号也是可以用的,毕竟应用中不是所有的文字都需要严格的对齐。

 

知识普及:

sp、dip,Android默认单位,可根据不同的屏幕大小自适应,同样的字号,不同的屏幕尺寸下显示的视觉效果大小不同。

Px属于固定像素值,不会主动自适应屏幕大小,不同的屏幕尺寸下显示的视觉效果大小效果相同。

补充:

1. dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为了支持WVGA、HVGA和QVGA 推荐使用这    这个,不依赖像素。 

    这里要特别注意dip与屏幕密度有关,而屏幕密度又与具体的硬件有关,硬件设置不正确,有可能导致dip不能正常显示。在屏幕密度为160的显示屏上,1dip=1px,有时候可能你的屏幕分辨率很大如480*800,但是屏幕密度没有正确设置比如说还是160,那么这个时候凡是使用dip的都会显示异常,基本都是显示过小。 

     dip的换算: 

           dip(value)=(int) (px(value)/1.5 + 0.5) 

2. dp: 很简单,和dip是一样的。 

3. px: pixels(像素),不同的设备不同的显示屏显示效果是相同的,这是绝对像素,是多少就永远是多少不会改变。 

4.  sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。 

备注: 根据google的推荐,像素统一使用dip,字体统一使用sp  

举个例子区别px和dip:

px就是像素,如果用px,就会用实际像素画,比个如吧,用画一条长度为240px的横线,在480宽的模拟器上看就是一半的屏宽,而在320宽的模拟器上看就是2/3的屏宽了。

而dip,就是把屏幕的高分成480分,宽分成320分。比如你做一条160dip的横线,无论你在320还480的模拟器上,都是一半屏的长度。

public static int dip2px(Context context, float dipValue){ 

                final float scale = context.getResources().getDisplayMetrics().density; 

                return (int)(dipValue * scale + 0.5f); 

        } 

        

    public static int px2dip(Context context, float pxValue){ 

                final float scale = context.getResources().getDisplayMetrics().density; 

                return (int)(pxValue / scale + 0.5f); 

        } 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android sp dip px