背景:我相信对于Android开发者来说,屏幕适配一直是你心中的痛~,为了让Android开发者从屏幕适配的痛苦中解脱出来,我决定实现这个Android自动化屏幕适配的1.0版本。下面来讲一下思路。

  1. 首先以values-w360作为标准也就是360dp,对应的设备就是720×1080俗称的720P的屏幕,也就是说设计师给的设计稿是以720P的屏幕作为设计图的,那么如果设计图上面的尺寸是100px,那么我们就需要用100/2 = 50dp得到我们的这个标准值,以此类推,将app中所有需要适配的尺寸都写入到values目录的dimens.xml(标准值)中,Android程序员所需要做的工作就这么多了。

  2. 接下来的工作就交给脚本了,首先脚本会将values/dimens.xml拷贝到需要适配的屏幕分辨率对应的目录,例如values-w400,然后用正则匹配出每一个尺寸,进行计算然后重新写入适配之后的值,这里以360dp为标准,400dp为需要适配的目标设备,以100px为例,那么(400/360)× 100 = 111,那么在values-w400dp这个目录中的dimens的该项目的值就是111dp了。

require 'fileutils'      BASE_DP=360    def adapte_dimens(dimens_file,alpha)      puts "adapter #{dimens_file}"      File.open dimens_file,'a+' do |f str ="" f.each_line{|line value = /(?<=>)\d+(?=(dp|sp))/.match(line).to_a[0]#匹配出尺寸的项目包括dp和sp if value value = value.to_f * alpha#计算适配后的值 str += line.gsub(/(?<=>)\d+(?=(dp|sp))/,value.to_i.to_s)#将新值写入 else str += line end } f.truncate(0) f.puts str end end values_list = Dir.entries("./").find_all{|f #通过修改这里的正则表达式,可以控制具体适配哪一个屏幕比如将正则改为/values-w400dp/那么就只会适配400dp的屏幕了 /values-w|values-sw/.match(f) } values_list.each do |v FileUtils.cp("values/dimens.xml",v) dest_file = "#{v}/dimens.xml" dp = /(\d{3})/.match(v) alpha = dp[0].to_f/BASE_DP#计算比率系数 adapte_dimens(dest_file,alpha) end 

总结:好了简单的Ruby自动化适配脚本就完成了,当然还有很多需要改进的地方,现在是每一次运行脚本就会覆盖目标目录中的dimens.xml文件,如果有时候自动适配的效果不好偶尔需要人工做一些微调,但是执行这个脚本之后微调的值就会丢失掉,所以还需要改进。有兴趣的同学可以自己实现。


更多相关文章

  1. Android(安卓)适配横屏
  2. Android初始化过程
  3. Activity设置为对话框属性时(Theme.Dialog)时,改变其在屏幕中的位置
  4. Android, App常用图标尺寸规范
  5. Android(安卓)WakeLock 使用总结
  6. android 横竖屏切换 源码剖析
  7. Android(安卓)Studio 3.3配置Butterknife处理
  8. Qt For Android(安卓)如何获取手机屏幕大小
  9. 【Android休眠】之休眠锁的获取和释放

随机推荐

  1. 将androd项目作为moudle引入配置信息
  2. Android(安卓)UI开发专题(四) View自绘控
  3. Android模拟器介绍及操作
  4. cocos2dx在Android下如何接入91SDK
  5. Android(安卓)studio制作计算器源代码
  6. Android(安卓)通过WebView和js的交互
  7. Android上传图片到七牛云看这篇就够了
  8. Android屏幕密度(Density)和分辨率的关系
  9. Android创建和使用数据库详细指南
  10. Android系统上部署usb打印机