Android 适配问题解决

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值