首页 > 代码库 > 设计师给了px单位的标注,Android开发到底要设置多少dip、dp、sp?

设计师给了px单位的标注,Android开发到底要设置多少dip、dp、sp?

本文链接    http://blog.csdn.net/xiaodongrush/article/details/29560431

1. 要开发一款Android APP,设计师和开发要约定哪些事情?

    首先,选择一款主流机型。
    然后,设计师根据该机型的屏幕尺寸设计效果图,给出px单位的标注。
    最后,开发根据该机型,可以算出px与dp的换算方法,根据px单位的标注,设置为dp为单位的标注。
    备注:1dp=1dip=1sp,对于一般长宽dp或者dip都可以,sp是字体专用单位,在操作系统中设置大中小号字体后,可以改变sp的显示大小。

    这样做可以保证在这款机型上,设计师的设计完全表现。对于其他机型,只要尺寸相差不是很大,显示效果相差不会太大。如果是在手机上设计,在pad上显示,相差就会比较大了。

2. 举例说明

    假设选择GalaxyNexus作为开发的目标机型。
    该机型的屏幕尺寸是720x1280。设计师在720x1280的画布上进行设计。
    根据计算公式,得知Galaxy Nexus上面,1dip=1dp=1sp=2px。所以对于40px的标注,开发需要给出20dip设置即可。

    换算代码如下,参考自http://www.imyukin.com/?p=277

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);
}
3. 没办法保证不同设备之间的完全适配

    http://su1216.iteye.com/blog/1569029,这篇讲的不错,只有当手机A的屏幕密度/手机B的屏幕密度=手机A的屏幕宽度/手机B的屏幕宽度的时候,A手机上设置的dip,sp,dp单位到了B手机上,才能实现等比缩放。这个条件太苛刻了,所以不可能有完全的适配。

4. 不能做到完全适配,还能做些什么

    既然绝对长度在不同手机之间不能完全适配,那么就减少使用绝对长度的机会。

    比如:一行只有一个很长的按钮,就不要用设置按钮的长度,因为不同手机上,按钮长度显示出不一样,有的手机上显示正常,在其他手机上可能就会显得距离屏幕两边很近,甚至超出屏幕。最好是设置按钮为match_parent,设置左右边距。这样不同手机上,边距都是一样的。

5. UI适配其他方面的事情

    本文主要是说一下标注转化的实际中怎么用的问题,UI适配还有很多地方要注意。比如:组件背景中常用9-patch,线性布局与相对布局,多种密度图片drawable-hdpi、drawable-ldpi和drawable-mdpi等。

    9-patch图片就是注意左边和下边的黑线控制缩放区域,右边和上边的黑线控制内容区域,很多人容易忽视内容区域。相对布局的用法还是比较多的,这里不展开了。多种分辨率图片,一般没条件切那么多图的话,给drawable-hdpi也就够了,多准备几款测试手机,看看效果比较重要。