Android Autolayout百分比适配方案(加小改进)

先说下文章目录吧:

1、适配相关概念

2、相关重要公式

3、适配方案一的介绍

4、适配方案二的介绍

5、适配方案二的采用与修改

下面开始进入正文:


一、首先说下适配相关的概念吧

① dip(dp):Density independent pixels,设备无关像素。是用来做适配的。能够让同一数值在不同的分辨率展示出大致相同的尺寸大小。但当设备的物理尺寸存在差异较大的时候,dp就显得无能为力了。例如 为4.3寸屏幕准备的UI,运行在5.0寸的屏幕上,很可能在右侧和下侧存在大量的空白。而5.0寸的UI运行到4.3寸的设备上,很可能显示不下。

②px:像素,没啥好说的

③dpi:dots per inch,直接来说就是一英寸多少个像素点。

④density: 直接翻译的话貌似叫 密度。常见取值1.5,1.0。

⑤分辨率 : 横纵2个方向的像素点的数量,常见取值480X800,320X480

⑥屏幕尺寸: 屏幕对角线的长度。电脑电视同理。

⑦屏幕比例的问题。因为只确定了对角线长,2边长度还不一定。所以有了4:3、16:9这种,这样就可以算出屏幕边长了。

二、相关公式:

①重要的有:dp与px转化   :PX = density * DP

②不重要的有Dpi计算:

三、适配方案一的介绍

鸿洋大神曾经出过几套适配的方案,这一种是让你的Activity去继承AutoLayoutActivity,然后正常去写px就行了。给大家个地址:http://blog.csdn.net/lmj623565791/article/details/49990941

给大家一张实际图:

这个乍一看非常简单,但实际没那么容易,只有直接继承Activity的改成继承AutoLayoutActivity才可以,那Fragment怎么办?listview的item怎么办,自己的自定义view怎么办?(貌似有解决的方案,不过就麻烦很多了)所以这个方案还需要继续改善。下面主要介绍第二套方案

四、适配方案二的介绍

照例先给大家上链接: http://blog.csdn.net/lmj623565791/article/details/45460089

大家都知道,美工给我们图的时候都会说这是什么分辨率的,然后每一个尺寸都是以px为单位的。

这第二种方法就是利用系统根据手机分辨率去自动选择对应的values目录,选择相应百分比的px尺寸实现的。

举个例子:

如果美工给我们的图是720 * 1280的(下面将美工给的分辨率命名为标准分辨率),那么,我们就将所有需要适配的尺寸的机型width分成720份,height分成1280份,例如另一个1080*1776的屏幕,width每一份是(1080/720)px,  height每一份是(1776/1280)px

这样,我们布局的时候不用再麻烦的去算dp了,只是需要将美工的横向60px写成“@dimen/x60 “竖向60px写成“@dimen/y60” (意思是width的720份中取60份的长,height的720份去60份)

然后看结果,(自己测试结果的时候,如果你的是真机,那请忽略,如果你用的是Google的虚拟机,那么请注意,你选择的分辨率不一定是真的分辨率,给大家一个函数,大家打印一下真实的分辨率然后再对应测试)

在标准分辨率720*1280的values-1280*720中,每一份是1px,所以width为60px,height也是60px,符合

在1080*1776的values-1776*1080中,width是(1080/720 *60)=90px,height是(1776/1280*60)=83.25px

这样就会自动对应到相应的百分比尺寸

方案也提供了对应的jar包,使用方法很简单:

jar后面的分别是标准分辨率width,标准分辨率height,和去除默认生成的常见机型分辨率(320*480; 480*800; 480*854;540*960; 600*1024; 720*1184; 720*1196; 720*1280; 768*1024; 800*1280; 1080*1812;1080*1920; 1440*2560)需要额外支持的机型分辨率。

java -jar xx.jar width height width,height_width,height

java -jar /Users/yujie/Desktop/autolayout.jar 720 1280 1080,1776

(注意,输入的时候width在前,height在后;生成的文件夹命名是height在前,width在后)


五、适配方案二的采用与修改

原版和改进版的jar包都已上传至GitHub:

https://github.com/yujiesuperman/autolayoutplus

下面说下修改的地方:

首先这样一大堆values是不是都是需要的?比如1080*1812等,不需要这么多的话可以更改源码中的默认机型,只选择需要的几款,或者生成后只拷贝需要的几个values文件夹。

但这样又有一个缺点,万一如果用户使用了我们没有生成对应values的尺寸,系统找不到,跑到了默认的values文件夹里,那里面的dimens里可没有x60,这样尺寸就找不到长宽都成了0px了,那界面就乱套了,所以,需要配合在默认的values的dimens里添加对应的:

即在生成原来那些文件的同时,又生成了一个lay_default.xml文件,这个文件生成的原理是根据UI提供的标准尺寸的density,和标准尺寸下的px,通过重要公式算出每个x和y对应的dp,格式如上图。再直接把文件的内容粘贴到默认values的dimens里,就可以重新按dp进行适配了~

目前只判断了这五种标准尺寸,一般UI就给这几种图吧,

jar源码也在git上给出,想了解的同学可以去下载查看。


       这样,适配方案就形成了,使用autolayoutplus生成各种文件,拷贝lay_default内容,然后产品pm让你适配哪一种机型,你就把哪一种尺寸拷贝进项目,多一种就再多生成一个values!

       新的项目准备使用这种方式进行机型适配,就目前的原理分析和测试来看,还没发现任何问题,如果有哪位大神发现有疏漏请留言指出,当然,能给出解决办法最好~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,179评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,229评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,032评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,533评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,531评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,539评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,916评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,813评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,568评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,654评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,354评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,937评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,918评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,152评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,852评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,378评论 2 342

推荐阅读更多精彩内容