自动生成Android屏幕适配的dimens.xml

最近团队再做Android App的屏幕适配,按照官方的办法是layout文件引用dimen变量,  变量放在多个不同分 辨率下的dimens.xml文件中,分别放在不同的目录下,

[java]  view plain  copy
  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 文件示例

[html]  view plain  copy
  1. <resources>  
  2.   
  3.       
  4.     <dimen name="activity_horizontal_margin">14dpdimen>  
  5.     <dimen name="activity_vertical_margin">14dpdimen>  
  6.   
  7.     <dimen name="action_bar_height">50dpdimen>  
  8.     <dimen name="tab_height">81dpdimen>  
  9.     <dimen name="content_margin">18dpdimen>  
  10.     <dimen name="list_title_height">63dpdimen>  
  11.   
  12.     <dimen name="report_table_header_height">54dpdimen>  
  13.     <dimen name="report_category_height">54dpdimen>  
  14.   
  15.     <dimen name="fab_size_normal">72dpdimen>  
  16.     <dimen name="fab_margin">14dpdimen>  


工具类代码,直接运行即可

[java]  view plain  copy
  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("")) {  
  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("") - 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("");  
  59.             System.out.println(sw480);  
  60.             System.out.println("");  
  61.             System.out.println(sw600);  
  62.   
  63.             System.out.println("");  
  64.             System.out.println(sw720);  
  65.             System.out.println("");  
  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.     }  
  106. }  

你可能感兴趣的:(Android)