dimens適配

TTMMJJ99發表於2018-03-27

最近團隊再做Android App的螢幕適配,按照官方的辦法是layout檔案引用dimen變數,  變數放在多個不同解析度下的dimens.xml檔案中,分別放在不同的目錄下,源地址::https://blog.csdn.net/offbye/article/details/48658097

  1. ./app/src/main/res/values-sw480dp-land/dimens.xml  
  2. ./app/src/main/res/values-sw600dp-land/dimens.xml  
  3. ./app/src/main/res/values-sw720dp-land/dimens.xml  
  4. ./app/src/main/res/values-sw800dp-land/dimens.xml  
  5. ./app/src/main/res/values-w820dp/dimens.xml  

人工處理這些dimens.xml,感覺比較麻煩,就是個體力活,於是做了個工具類按比例自動化生成dimens.xml檔案,效率瞬間提高了很多倍,如果需要特殊定義尺寸,放到另一個xml檔案裡面就行了。


values/dimens.xml 檔案示例

  1. <resources>  
  2.   
  3.     <!-- Default screen margins, per the Android Design guidelines. -->  
  4.     <dimen name="activity_horizontal_margin">14dp</dimen>  
  5.     <dimen name="activity_vertical_margin">14dp</dimen>  
  6.   
  7.     <dimen name="action_bar_height">50dp</dimen>  
  8.     <dimen name="tab_height">81dp</dimen>  
  9.     <dimen name="content_margin">18dp</dimen>  
  10.     <dimen name="list_title_height">63dp</dimen>  
  11.   
  12.     <dimen name="report_table_header_height">54dp</dimen>  
  13.     <dimen name="report_category_height">54dp</dimen>  
  14.   
  15.     <dimen name="fab_size_normal">72dp</dimen>  
  16.     <dimen name="fab_margin">14dp</dimen>  


工具類程式碼,直接執行即可

  1. import java.io.BufferedReader;  
  2. import java.io.BufferedWriter;  
  3. import java.io.File;  
  4. import java.io.FileReader;  
  5. import java.io.FileWriter;  
  6. import java.io.IOException;  
  7. import java.io.PrintWriter;  
  8.   
  9. /** 
  10.  * 根據values/dimens.xml, 自動計算比例並生成不同解析度的dimens.xml 
  11.  * 注意用dp和sp,不要用dip,否則生成可能會出錯;xml值不要有空格 
  12.  * Created by zhangxitao on 15/9/22. 
  13.  */  
  14. public class DimenTool {  
  15.   
  16.     public static void gen() {  
  17.   
  18.         File file = new File("./app/src/main/res/values/dimens.xml");  
  19.         BufferedReader reader = null;  
  20.         StringBuilder sw480 = new StringBuilder();  
  21.         StringBuilder sw600 = new StringBuilder();  
  22.         StringBuilder sw720 = new StringBuilder();  
  23.         StringBuilder sw800 = new StringBuilder();  
  24.         StringBuilder w820 = new StringBuilder();  
  25.   
  26.   
  27.         try {  
  28.             System.out.println("生成不同解析度:");  
  29.             reader = new BufferedReader(new FileReader(file));  
  30.             String tempString;  
  31.             int line = 1;  
  32.             // 一次讀入一行,直到讀入null為檔案結束  
  33.   
  34.             while ((tempString = reader.readLine()) != null) {  
  35.   
  36.                 if (tempString.contains("</dimen>")) {  
  37.                     //tempString = tempString.replaceAll(" ", "");  
  38.                     String start = tempString.substring(0, tempString.indexOf(">") + 1);  
  39.                     String end = tempString.substring(tempString.lastIndexOf("<") - 2);  
  40.                     int num = Integer.valueOf(tempString.substring(tempString.indexOf(">") + 1, tempString.indexOf("</dimen>") - 2));  
  41.   
  42.                     sw480.append(start).append((int) Math.round(num * 0.6)).append(end).append("\n");  
  43.                     sw600.append(start).append((int) Math.round(num * 0.75)).append(end).append("\n");  
  44.                     sw720.append(start).append((int) Math.round(num * 0.9)).append(end).append("\n");  
  45.                     sw800.append(tempString).append("\n");  
  46.                     w820.append(tempString).append("\n");  
  47.   
  48.                 } else {  
  49.                     sw480.append(tempString).append("\n");  
  50.                     sw600.append(tempString).append("\n");  
  51.                     sw720.append(tempString).append("\n");  
  52.                     sw800.append(tempString).append("\n");  
  53.                     w820.append(tempString).append("\n");  
  54.                 }  
  55.                 line++;  
  56.             }  
  57.             reader.close();  
  58.             System.out.println("<!--  sw480 -->");  
  59.             System.out.println(sw480);  
  60.             System.out.println("<!--  sw600 -->");  
  61.             System.out.println(sw600);  
  62.   
  63.             System.out.println("<!--  sw720 -->");  
  64.             System.out.println(sw720);  
  65.             System.out.println("<!--  sw800 -->");  
  66.             System.out.println(sw800);  
  67.   
  68.             String sw480file = "./app/src/main/res/values-sw480dp-land/dimens.xml";  
  69.             String sw600file = "./app/src/main/res/values-sw600dp-land/dimens.xml";  
  70.             String sw720file = "./app/src/main/res/values-sw720dp-land/dimens.xml";  
  71.             String sw800file = "./app/src/main/res/values-sw800dp-land/dimens.xml";  
  72.             String w820file = "./app/src/main/res/values-w820dp/dimens.xml";  
  73.             writeFile(sw480file, sw480.toString());  
  74.             writeFile(sw600file, sw600.toString());  
  75.             writeFile(sw720file, sw720.toString());  
  76.             writeFile(sw800file, sw800.toString());  
  77.             writeFile(w820file, w820.toString());  
  78.         } catch (IOException e) {  
  79.             e.printStackTrace();  
  80.         } finally {  
  81.             if (reader != null) {  
  82.                 try {  
  83.                     reader.close();  
  84.                 } catch (IOException e1) {  
  85.                     e1.printStackTrace();  
  86.                 }  
  87.             }  
  88.         }  
  89.     }  
  90.   
  91.     public static void writeFile(String file, String text) {  
  92.         PrintWriter out = null;  
  93.         try {  
  94.             out = new PrintWriter(new BufferedWriter(new FileWriter(file)));  
  95.             out.println(text);  
  96.         } catch (IOException e) {  
  97.             e.printStackTrace();  
  98.         }  
  99.   
  100.         out.close();  
  101.     }  
  102.   
  103.     public static void main(String[] args) {  
  104.         gen();  
  105.     }  

相關文章