Android 适配问题解决

来源:互联网 发布:酒店网络设计方案 编辑:程序博客网 时间:2024/06/04 20:04

Android 适配问题解决
项目目前需要做适配,之前本人的方法是多写几套dimens.xml,手动测试显示问题,最后还是不怎么方便,网上查阅发现有一套方法,就是了解各个机型相对于values目录下的值,按比例生成对应尺寸的值。

基本原理:
本质是通过java读写xml文件,根据不同的机型对应生成不同的值。

方法:

1.通过一个工具在工程里面运行,代码如下:

public class DimenTool {      public static void gen() {          //以此文件夹下的dimens.xml文件内容为初始值参照          File file = new File("C:/Users/vigoss/Desktop/workspace/agrimobile/app/DimenTool/src/com/cn/util/dimens.xml");          BufferedReader reader = null;          StringBuilder sw240 = new StringBuilder();          StringBuilder sw480 = new StringBuilder();          StringBuilder sw600 = new StringBuilder();          StringBuilder sw720 = new StringBuilder();          StringBuilder sw800 = new StringBuilder();          StringBuilder w820 = new StringBuilder();          try {              System.out.println("生成不同分辨率:");              reader = new BufferedReader(new FileReader(file));              String tempString;              int line = 1;              // 一次读入一行,直到读入null为文件结束              while ((tempString = reader.readLine()) != null) {                  if (tempString.contains("</dimen>")) {                      //tempString = tempString.replaceAll(" ", "");                      String start = tempString.substring(0, tempString.indexOf(">") + 1);                      String end = tempString.substring(tempString.lastIndexOf("<") - 2);                      //截取<dimen></dimen>标签内的内容,从>右括号开始,到左括号减2,取得配置的数字                      Double num = Double.parseDouble                              (tempString.substring(tempString.indexOf(">") + 1,                                       tempString.indexOf("</dimen>") - 2));                      //根据不同的尺寸,计算新的值,拼接新的字符串,并且结尾处换行。                      sw240.append(start).append( num * 0.75).append(end).append("\r\n");                      sw480.append(start).append(num * 1.5).append(end).append("\r\n");                      sw600.append(start).append(num * 1.87).append(end).append("\r\n");                      sw720.append(start).append(num * 2.25).append(end).append("\r\n");                      sw800.append(start).append(num * 2.5).append(end).append("\r\n");                      w820.append(start).append(num * 2.56).append(end).append("\r\n");                  } else {                      sw240.append(tempString).append("");                      sw480.append(tempString).append("");                      sw600.append(tempString).append("");                      sw720.append(tempString).append("");                      sw800.append(tempString).append("");                      w820.append(tempString).append("");                  }                  line++;              }              reader.close();              System.out.println("<!--  sw240 -->");              System.out.println(sw240);              System.out.println("<!--  sw480 -->");              System.out.println(sw480);              System.out.println("<!--  sw600 -->");              System.out.println(sw600);              System.out.println("<!--  sw720 -->");              System.out.println(sw720);              System.out.println("<!--  sw800 -->");              System.out.println(sw800);              String sw240file = "C:/Users/vigoss/Desktop/workspace/agrimobile/app/DimenTool/src/com/cn/util/values-sw240dp-land/dimens.xml";              String sw480file = "C:/Users/vigoss/Desktop/workspace/agrimobile/app/DimenTool/src/com/cn/util/values-sw480dp-land/dimens.xml";              String sw600file = "C:/Users/vigoss/Desktop/workspace/agrimobile/app/DimenTool/src/com/cn/util/values-sw600dp-land/dimens.xml";              String sw720file = "C:/Users/vigoss/Desktop/workspace/agrimobile/app/DimenTool/src/com/cn/util/values-sw720dp-land/dimens.xml";              String sw800file = "C:/Users/vigoss/Desktop/workspace/agrimobile/app/DimenTool/src/com/cn/util/values-sw800dp-land/dimens.xml";              String w820file = "C:/Users/vigoss/Desktop/workspace/agrimobile/app/DimenTool/src/com/cn/util/values-w820dp/dimens.xml";             //将新的内容,写入到指定的文件中去              writeFile(sw240file, sw240.toString());              writeFile(sw480file, sw480.toString());              writeFile(sw600file, sw600.toString());              writeFile(sw720file, sw720.toString());              writeFile(sw800file, sw800.toString());              writeFile(w820file, w820.toString());          } catch (IOException e) {              e.printStackTrace();          } finally {              if (reader != null) {                  try {                      reader.close();                  } catch (IOException e1) {                      e1.printStackTrace();                  }              }          }      }      /**      * 写入方法      *      */      public static void writeFile(String file, String text) {          File temp = new File(file);        if(!temp.exists()){        new File(file.substring(0,file.lastIndexOf("/"))).mkdirs();//创建目录        try {            new File(file).createNewFile();        } catch (IOException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }//创建文件        }        PrintWriter out = null;          try {              out = new PrintWriter(new BufferedWriter(new FileWriter(file)));              out.println(text);          } catch (IOException e) {              e.printStackTrace();          }          out.close();      }      public static void main(String[] args) {          gen();      }  }  

2.设置目标文件为values下的dimens.xml

3.然后运行main函数,在对应文件下看到生成的文件

PS:如果发现自动生成的值不准确,还是根据某个文件不准确单独在调试。

0 0
原创粉丝点击