Android開發之Ruby實現Android自動化螢幕適配

來源:互聯網
上載者:User

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檔案,如果有時候自動適配的效果不好偶爾需要人工做一些微調,但是執行這個指令碼之後微調的值就會丟失掉,所以還需要改進。有興趣的同學可以自己實現。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.