Android開發之Ruby實現Android自動化螢幕適配
背景:我相信對於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 #通過修改這裡的Regex,可以控制具體適配哪一個螢幕比如將正則改為/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檔案,如果有時候自動適配的效果不好偶爾需要人工做一些微調,但是執行這個指令碼之後微調的值就會丟失掉,所以還需要改進。有興趣的同學可以自己實現。