android屏幕分辨率适配

 

分辨率高度宽度宽高比(宽/高)
1920x1080192010800.5625
2094x1080209410800.5157593123
2220x1080222010800.4864864865
1280x72012807200.5625
2392x1440239214400.602006689
2560x1440256014400.5625
1776x1080177610800.6081081081
2030x1080203010800.5320197044
2118x1080211810800.5099150142
2076x1080207610800.5202312139
568x3205683200.5633802817
800x4808004800.6
854x4808544800.5620608899
960x5409605400.5625
1184x72011847200.6081081081
1208x72012087200.5960264901
1280x80012808000.625
1280x76812807680.6
1176x1080117610800.9183673469
1800x1080180010800.6
1812x1080181210800.5960264901
1920x1152192011520.6
1920x1200192012000.625
2160x1080216010800.5
2208x1080220810800.4891304348
2240x1080224010800.4821428571
2244x1080224410800.4812834225
2280x1080228010800.4736842105
2560x1312256013120.5125
2560x1600256016000.625
2960x1400296014000.472972973

图一,完美的阐述了安卓分辨率之多,且宽高比率不一致的问题,

图二,完美的阐述了安卓分辨率的适配方案。

关于安卓手机分辨率尺寸各有不同,为了支持多种屏幕,给大家推荐三种适配方案:

1.googe开源百分比布局

2.动态适配各个屏幕分辨率      

3.静态适配各个屏幕分辨率(XML自动生成工具)

(以上三种方案可以根据项目实际情况相结合使用)

 

这里主要说下第二种方案和第三种方案的原理:

第二种方案,其实就是通过一系列算法去计算每个view在用户手机屏幕中应该的宽高,从而达到一个适配效果;

第三种方案,原理大致简单的说一下吧,每个公司都有自己的UI设计师,通常设计师会在一个屏幕尺寸上作图,例如设计师在1280x720上作图,那么我们在android项目工程的res目录下新建文件夹values-1208x720,另外再新建两个文件dimens_width.xml和dimens_height.xml用来存放宽度和高度。

   

我们可以看到,name-value的一一对应关系,所以UI设计师在1280x720尺寸上作图时,如果效果图上标注控件的宽是4px,高是2px,那么我们引用 android:layout_width="@dimen/width4px"   android:layout_height="@dimen/height2px"  就可以达到完美的适配效果。那么问题来了,它在1920x1080分辨率上的尺寸怎么办呢?使用“静态xml适配各个屏幕分辨率”来解决此问题,它会自动生成相对应的尺寸大小至values-1920x1080目录下。

上图中我们可以看到,在values-1920x1080中,width4px对应的是6px,而height2px对应的是3px,是因为在生成静态xml的时候就根据你的UI效果图的基础尺寸把其他分辨率上的尺寸给适配好了,所以,还是那句话,我们引用 android:layout_width="@dimen/width4px"   android:layout_height="@dimen/height2px"  就可以达到完美的适配效果。

为了帮助大家更好的理解,我再举个栗子,假设UI设计师有时候在720x1280上做效果图,有时候在1080x1920上做效果图,那该怎么应用呢?UI设计师在哪个屏幕分辨率上做标注,你就传入哪个屏幕分辨率目录下跟UI设计师标注的相对应宽高的值所对应的资源名称即可。

安卓设备有数不尽的各种奇葩分辨率,我们需要每个屏幕分辨率都生成xml文件吗?不需要,你可以选取你们app用户量排名前30的设备来做分辨率适配,然后另外也可以选取一些特定的分辨率就可以了,因为即使用户的设备找不到与之相匹配的大小时,它还会向下寻找与它相近的文件夹分辨率来取值,但是这里要注意了,如果找不到与之匹配的大小时,向下也没有声明比这更小的分辨率文件夹时,并且也没有设置默认的分辨率文件时,它可能会无情的向你报一个错:

Caused by: android.view.InflateException: Binary XML file line #13: Binary XML file line #13: You must supply a layout_width attribute

Caused by: java.lang.UnsupportedOperationException: Binary XML file line #13: You must supply a layout_width attribute.

以防万一,我们还可以选择在res/values目录下新建默认分辨率。 

  • 6
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值