Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android開發之Ruby實現Android自動化屏幕適配

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

編輯:關於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
        #通過修改這裡的正則表達式,可以控制具體適配哪一個屏幕比如將正則改為/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. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved