很多UI工程师为了适配IOS,常常拿IOS手机作用参考模型,设计出来的UI稿只有PX标注的。他们也不懂Android的dp和sp单位是怎么回事。这个时候我们Android工程师如果不注意怎么转换的话,就可能开发出很难看的界面。

那么如何才能正确的将UI稿的上的px转换成android的dp单位呢?这个取决于UI设计师的设计稿基于什么设备。

一般安卓开发者只要适配一款主流设备,比如Nexus5,其它大部分手机都可以适配。如果要精确适配,就要针对不同分辨率进行单独适配。为了简单起见,我们只需要适配主流设备就可以了。

首先,我们要知道UI设计师的设计稿是基于什么设备设计的。知道了什么设备,这个设备的dpi也就知道了。那么px与dp之间换算就很简单:px=(dpi/160)dp。公式变形:dp=px*160/dpi

要注意的是这个公式中dpi并不是我们自己计算出来的(屏幕对角线的相素数除以对角线长度),而是手机厂家ROM中设置density(density=dpi/160),android通过java代码可以直接获取:

//以下是获取density,density=densityDpi/160 context.getResources().getDisplayMetrics().density;//以下是获取densityDpi,就是我们常说的dpi:像素密度 context.getResources().getDisplayMetrics().densityDpi;

而实际情况下,设计师常常并没有针对安卓设备单独做一套设计稿,而是选择了iphone手机作为参考机型。他们以为适配了IOS就等于适配了安卓。标注尺寸单位都是px。设计帅常常拿iphone6(s)或者是iphone6(s) plus作为参考机型,一个4.7寸一个5.5寸。比如是4.7英寸的iphone6,它的分辨率是1334x750(dpi是326),而安卓设备最接近这个数值的分辨率是1280*720,对应这个分辨率的dpi一般是320,跟iphone 6(s)很接近,那么UI使用的iphone6(s)设计稿就对应安卓1280x720(dpi是320)的设备,所以我们就用320这个dpi进行换算。再比如是5.5英寸的iphone6 plus,它的分辨率是1920x1080(dpi是480),而安卓设备刚好也有很多同等的分辨率,对应这个分辨率的dpi一般是480,而iphone6 plus的dpi也是480,所以我们用480的dpi进行换算。

举个例子,设计师基于iphone6的设计稿标注20px,换算成dp就是20*160/320=20*(1/2)=20/2=10,也就是除以2得到dp。如果设计师基于iphone6 plus的设计稿标注120px,那么dp就是120*160/480=120*(1/3)=120/3=40,也就是除以3得到dp

那么如何知道设计稿是基于什么设备设计的呢?一般我们看UI稿的尺寸就可以推测出它的参考机型,比如UI稿的尺寸是1334x750,那肯定是iphone6(s)一类的机型,如果是1920x1080,那就是iphone6(s) plus一类的机型。如果UI稿的尺寸匹配不到一款主流的机型,那就是UI设计师不合格啦!

还有一种方法,程序员不需换算,UI设计师可以直接在设计工具中将px单位转换成dp单位,标注图上显示的就是dp单位,比如PxCook这个工具已经支持这个功能。

以上是一般性的适配方法,如果厂商生产的手机很奇葩,比如1280*720的分辨率dpi不是320,而是相差很大,比如是400,那么Android开发者就需要进行单独适配了。

更多相关文章

  1. android适配器模式设计与实现
  2. 基于Android与云平台的多功能社交软件(毕业设计)
  3. Android开发之adb && 破解开屏图案 && 代码判断当前是否处于锁屏
  4. android 6.0获取mac 地址都是02:00:00:00:00:00 的问题
  5. 巧用事件分发机制,和我一起hold住android外围设备
  6. 闲话Android(安卓)之 屏幕大小、pixel、分辨率、dpi、dip
  7. 【android】音乐播放器之service服务设计
  8. Android(安卓)设备兼容性使用方法详解
  9. Android应用程序开发以及背后的设计思想深度剖析(1)

随机推荐

  1. android手机内存中的文件操作
  2. 转-Android数据存储(总结篇)
  3. Android:ListView优化
  4. EditText的详细属性说明
  5. checkbox 与 listview 等混用焦点问题
  6. Android(安卓)drawRegion 绘制
  7. android 学习基础篇---开发环境的搭建 Ec
  8. SQLite数据库并发访问
  9. Android输入输出系统之TouchEvent流程
  10. Android(安卓)特殊用法--来自中国移动开