背景:我相信对于Android开发者来说,屏幕适配一直是你心中的痛~,为了让Android开发者从屏幕适配的痛苦中解脱出来,我决定实现这个Android自动化屏幕适配的1.0版本。下面来讲一下思路。
-
首先以values-w360作为标准也就是360dp,对应的设备就是720×1080俗称的720P的屏幕,也就是说设计师给的设计稿是以720P的屏幕作为设计图的,那么如果设计图上面的尺寸是100px,那么我们就需要用100/2 = 50dp得到我们的这个标准值,以此类推,将app中所有需要适配的尺寸都写入到values目录的dimens.xml(标准值)中,Android程序员所需要做的工作就这么多了。
-
接下来的工作就交给脚本了,首先脚本会将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文件,如果有时候自动适配的效果不好偶尔需要人工做一些微调,但是执行这个脚本之后微调的值就会丢失掉,所以还需要改进。有兴趣的同学可以自己实现。
分享到:
相关推荐
Ruby自动化脚本实现网络拓扑映射
ruby,自动化框架watir,是windows版本的,机不可失哦,赶快啊
开放Ruby+watir 自动化测试工具介绍+安装说明
rubychina4android by gonjay google design icons 屏幕截图 LICENSE Copyright (C) 2015 xialincn This program is free software: you can redistribute it and/or modify it under the terms of the GNU ...
代码仅供参考学习! 基于ruby环境部署的自动化模块化小项目 该项目中前端自动化及模块化目前只是最简单的实现方式,简化及更多文件合并/压缩还有待提高
ruby-on-lambda, 自动化脚本,帮助运行 ruby 2.1程序 上的 ruby为什么?因为:AWS的Lambda具有巨大的潜在意义和有趣的含义AWS的Lambda还没有正式支持 ruby,因为ruby 具有巨大的潜在意义和有趣的含义 !?通过:将一...
自动化测试的一些简单总结及介绍,纯属于个人的一点心血之作,总结了单元测试
android ruby解释器
Watir 是一个使用 Ruby 实现的开源Web 自动化测试框架,相对于那些庞大的商业工具来说,它很小巧,也很灵活,提供的功能也足够用。 它支持当前流行的浏览器。 它是免费的开源库,而且使用起来非常的方便。
ruby开发文档ruby开发文档ruby开发文档ruby开发文档
本资源是飞机大战类射击游戏的ruby实现,需要安装rpg maker xp 1.03才可打开本游戏。
ruby实现邮件收发
[Packt Publishing] 开发经典命令行程序 (Ruby 实现) 第2版 (英文版) [Packt Publishing] Build Awesome Command-Line Applications in Ruby 2 Control Your Computer, Simplify Your Life 2nd Edition (E-Book) ...
twitter-cldr-rb - ICU的Ruby实现
ruby on rails社区网站开发源码
ruby on rose开发文档-开发 基本包含所有类和函数方法 有助于ruby开发
Android-PullToRefresh : 下拉刷新和到底部自动加载,以后可能换成SwipeRefreshLayout butterknife: view注入框架,简化开发,减少代码。 ListViewAnimations:ListView添加动画 AndroidStaggeredGrid:支持不同高度...
安卓系统Ruby现在支持纸杯蛋糕 (Android 1.5) irbapp.apk 包含 libruby.so /sdcard/ruby 中的其他 ruby 脚本和共享库。 和,原生 ruby 命令 ruby: ELF 32-bit LSB executable, ARM, version 1 (SYSV), ...