Ruby实现Android自动化屏幕适配_Ruby_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > Ruby > Ruby实现Android自动化屏幕适配

Ruby实现Android自动化屏幕适配

 2014/10/21 19:36:47  heisedeyueya  程序员俱乐部  我要评论(0)
  • 摘要:以后我将逐步在我的个人博客中写文章,有兴趣的同学可以访问:http://vjson.com我相信对于Android开发者来说,屏幕适配一直是你心中的痛~,为了让Android开发者从屏幕适配的痛苦中解脱出来,我决定实现这个Android自动化屏幕适配的1.0版本。下面来讲一下思路。首先以values-w360作为标准也就是360dp,对应的设备就是720×1080俗称的720P的屏幕,也就是说设计师给的设计稿是以720P的屏幕作为设计图的,那么如果设计图上面的尺寸是100px
  • 标签:android 实现 Ruby
    以后我将逐步在我的个人博客中写文章,有兴趣的同学可以访问:http://vjson.com
  
   我相信对于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了。


class="ruby" name="code">
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文件,如果有时候自动适配的效果不好偶尔需要人工做一些微调,但是执行这个脚本之后微调的值就会丢失掉,所以还需要改进。有兴趣的同学可以自己实现。
上一篇: 加号增加书架,减号减少书架(code4App) 下一篇: 没有下一篇了!
发表评论
用户名: 匿名