工作中Android开发的屏幕适配问题

学习适配http://blog.csdn.net/lantiankongmo/article/details/50549128

dp生成工具http://blog.csdn.net/hnzcdy/article/details/50628993

查看屏幕信息工具http://blog.csdn.net/u014608640/article/details/52942496

 关于android的屏幕适配问题许多资料中都有讲解,而且讲的比较深入,虽然之前也看过好几遍,但是在工作中使用还是会有点懵懵的;那我在这里直接说在我在工作中如何将设计标注的px图转换为dp吧。

1.美工设计会给你一套带有px标注的界面切图,你需要知道是美工是在什么分辨率下的画布做的界面切图;

现在一般都是在1080*1920分辨率下做图的;

 1080*1920分辨率的画布下做图如下:

我们的美工设计是在1080*1920的画布上标注的宽高是:1200px*900px;

1200 * 900px=1200px/3 * 900px/3 = 400dp * 300dp;这个界面的宽为400dp,高为300dp;

如果我们将画布的分辨为改为720*1920,在原有的界面比例不变的情况下标注对应的标注会变小1.5倍:800px*600px;

800px*600px=800px/2 * 600px/2 = 400dp * 300dp;这个界面的宽为400dp,高为300dp;

最后我们得到的都是400dp和300dp宽高;因此我们的dp是一个与分辨率无关的长度单位;

所以我们只需要知道美工是在什么分辨率下做的图,对应的px标注根据1080*1920是除以3, 720*1280是除以2,如下


那我们android使用dp值是不是就不需要做屏幕适配了呢?其实在工作很多公司美工只会切一套分辨率的界面图给你,
我们开发的话也通常只需要根据px标注转换为dp就行了,因为dp就是可以看做px分辨率转换为尺寸后的长度单位,那什么时候我们需要做屏幕适配呢,就是在不同的尺寸的屏幕下如平板就需要做适配,不信你看下面测试;

1080*1920 xxhdpi 5.0寸

720*1280 xhdpi 4.7寸


800*1280 tvdpi 7.0寸


上面在1080*1920和在720*1280的分辨下不改变dp的界面比例效果是一样的,只有在平板尺寸变大了的情况下不改变dp的界面的比例效果才会改变这时就需要做适配了,因此得到dp与设备分辨率无关与设备尺寸有关的长度单位,因为平板的尺寸变长了所以对应的dp需要变大。

关于平板适配应该是由美工在根据平板的实际尺寸做一套大尺寸的界面的标注图,但一般只有图标和图片会做多套切图,界面标注设计几套就有些麻烦了,我是这么做的:

1.得到平板的信息 分辨率 尺寸 :


可以得到平板的分辨率是1223*720 尺寸5.6*5.6+3.3*3.3 开发= 6.5寸


2.得到美工的界面标注图(1080*1920下的标注):


 我们将其改为与平板分辨率一直的标注,这里的标注应该是美工根据平板大小尺寸比例重新的标记,跟前面说的我们标注的尺寸比例不变最后得到还是同一个dp,但是要求平板适配严格和美观的前提下是要改变标注的尺寸比例的,一般公司要求不会那么严格,但是步骤是不变的。

3.将美工在1080*1920画布的标注转换为接近平板720*1280画布的标注(这里我们的比例没有改变)
 66px/3*2=44px
 
3.将平板720*1280画布的px标注转换为dp:
 我们得到平板的密度为1.35(计算密度方法如下,也可以使用上面的工具得到),标注px/1.35的密度;
44px/1.35≈33dp
 
快速算法1080*1920画布做图提高一图标注:
1080*1920画布:66px/ 3(480/160系统默认密度) =22dp
720*1280画布: 44px/2(320/160系统默认密度)=22dp  
适配720*1280平板:44px/1.35(216/160系统默认密度)=32dp 
不同分辨率画布做的准确标注 px/屏幕屏幕密度dip = px/dip
4.创建values-sw533dp-land(最想宽度文件夹,可以使用上面的工具生成dimens)
32dp/22dp=1.45≈1.5  22*1.5=33dp



适配后的的平板比例



相关介绍(计算密度方法如下

240×320的屏幕是低密度120dpi,即ldpi;320×480的屏幕是中密度160dpi,即 mdpi;480×800的屏幕是高密度240dpi,即hdpi;720×1280的屏幕是超高密度320dpi,即xhdpi;1080×1920的 屏幕是超超高密度480dpi,即xxhdpi。
计算方法:
1.得到设备的分辨率
2.得到设备尺寸
3.列:1280*720的分辨率,就是1280的屏幕密度*720的屏幕密度:
1. 分辨率就是手机屏幕的像素点数,在相同尺寸的设备下,
2. 屏幕大小:屏幕对角线的长度,5寸*2.54厘米/寸=12.7厘米.
3. 密度:屏幕的密度,先算出对角线的像素点数(分辨率)然后除以对对角线的长度(屏幕大小尺寸),
1280*720的分辨率在5英寸的屏幕上的密度计算:(1280*1280+720*720)开方=1468,得到屏幕的像素点,1468/5≈294dp,系统默认的像素密度为160dp时1px=1dp,294/160≈1.8倍,就是在正常的(320×480的屏幕是中密度160dpi,即 mdpi)的基础上乘以1.8的倍速,系统默认会给2倍(720×1280的屏幕是超高密度320dpi)

引用:

“实际密度”就是我们自己算出来的密度,这个密度代表了屏幕真实的细腻程度,如上述例子中的294dpi就是实际密度,说明这块屏幕每寸有294个像素。5英寸1280*720的屏幕密度是294,而相同分辨率的4.5英寸屏幕密度是326。如此看来,屏幕密度将会出现很多数值,呈现严重的碎片化。而密度又是安卓屏幕将界面进行缩放显示的依据,那么安卓是如何适配这么多屏幕的呢?

其实,每部安卓手机屏幕都有一个初始的固定密度,这些数值是120、160、240、320、480,我们权且称为“系统密度”。大家发现规律没有?相隔数值之间是2倍的关系。一般情况下,240×320的屏幕是低密度120dpi,即ldpi;320×480的屏幕是中密度160dpi,即mdpi;480×800的屏幕是高密度240dpi,即hdpi;720×1280的屏幕是超高密度320dpi,即xhdpi;1080×1920的屏幕是超超高密度480dpi,即xxhdpi。

安卓对界面元素进行缩放的比例依据正是系统密度,而不是实际密度,160是系统给出基于屏幕尺寸和像素占比最优值。




  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值