android屏幕适配,自动生成不同的dimens.xml详解
2016-02-03 13:47
627 查看
android中官方建议的屏幕适配方式,通过根据不同的分辨率在工程的res文件夹下建立不同的尺寸文件夹,每个文件夹下都建立dimens.xml文件。然后根据不同的尺寸在dimens.xml文件夹中分别计算配置不同的dp或者sp单位。开发中发现,android屏幕适配需要用到很多的尺寸,每个尺寸都建立dimens.xml问价。每个文件中的数值都要按照比例去计算,一个一个拿着计算器去计算吗?这样太麻烦了。今天有一个好的办法,来为大家介绍一下。
三、DimenTool.java类的代码如下,已做了注释。
三、在建立项目的过程中,首先配置初始默认的dimens.xml文件,其余的尺寸先不用管。项目的所有配置结束后,在DimenTool.java类中,右键Run
一、首先我们在工程的res文件夹下,建立不同尺寸的valuse配置文件夹。并在不同的文件夹下建立不同的dimens.xml文件。valuse为默认的工程配置,其余的为根据不同的尺寸适配用户自己新建。(这里以android studio 1.5为示例)
二、在工程的java文件夹下建立DimenTool.java文件。
三、DimenTool.java类的代码如下,已做了注释。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; /** * Created by cdy on 2016/2/3. * 快速生成适配工具类 */ public class DimenTool { public static void gen() { //以此文件夹下的dimens.xml文件内容为初始值参照 File file = new File("./app/src/main/res/values/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 = "./app/src/main/res/values-sw240dp-land/dimens.xml"; String sw480file = "./app/src/main/res/values-sw480dp-land/dimens.xml"; String sw600file = "./app/src/main/res/values-sw600dp-land/dimens.xml"; String sw720file = "./app/src/main/res/values-sw720dp-land/dimens.xml"; String sw800file = "./app/src/main/res/values-sw800dp-land/dimens.xml"; String w820file = "./app/src/main/res/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) { 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(); } }
三、在建立项目的过程中,首先配置初始默认的dimens.xml文件,其余的尺寸先不用管。项目的所有配置结束后,在DimenTool.java类中,右键Run
DimenTool.main执行这段代码,就可以在指定的个路径dimens.xml文件中按照事先设置好的比例参数,生成对应的适配。
四、在控制台看到正确的输出结果,表明自动生成的适配数据生成完成。各个尺寸的values文件夹中的dimens.xml中也有相应的值。
相关文章推荐
- Android ShareSDK快速实现分享功能
- Android IOS WebRTC 音视频开发总结(六三)-- 2016国内IM云服务行业分析
- android确定取消对话框以及单选多选对话框
- Android 自定义下拉刷新样式解决方案
- Android 实用代码片段
- 如何用Fiddler对Android应用进行抓包
- Android基础:翻页控件Viewpager的使用方法,viewpager+fragment混合使
- Android组件与进程间的通信-Handler
- Android-萤石云绕开登录页后台登陆
- 好的android 相关的技术博客
- Android编译命令使用技巧
- android 隐藏系统键盘
- [Andorid开发艺术探索 读书笔记]View的事件体系(三)
- Android Jni开发之自动化编译javap
- Android Layout inflate分析(2) - ViewGroup
- LinearLayout 动态添加TextView控件
- Android 高手进阶,自己定义圆形进度条
- Android Jni开发之自动化编译javah
- 【既见树木又见森林系列(一)】Android系统的启动过程
- android studio编程时引入外部字体样式