android屏幕适配,自动生成不同的dimens.xml详解
16lz
2021-01-23
android屏幕适配,自动生成不同的dimens.xml详解
标签: androidandroid屏幕适配dimens.xmlandroid自动生成屏幕适配尺寸 2016-02-03 13:47 13670人阅读 评论(21) 收藏 举报 分类: android(23)版权声明:本文为博主原创文章,转载请注明文章地址
目录(?)[+]
Android中官方建议的屏幕适配方式,通过根据不同的分辨率在工程的res文件夹下建立不同的尺寸文件夹,每个文件夹下都建立dimens.xml文件。然后根据不同的尺寸在dimens.xml文件夹中分别计算配置不同的dp或者sp单位。开发中发现,android屏幕适配需要用到很多的尺寸,每个尺寸都建立dimens.xml问价。每个文件中的数值都要按照比例去计算,一个一个拿着计算器去计算吗?这样太麻烦了。今天有一个好的办法,来为大家介绍一下。
一、首先我们在工程的res文件夹下,建立不同尺寸的valuse配置文件夹。并在不同的文件夹下建立不同的dimens.xml文件。valuse为默认的工程配置,其余的为根据不同的尺寸适配用户自己新建。(这里以android studio 1.5为示例)
二、在工程的java文件夹下建立DimenTool.java文件。
三、DimenTool.java类的代码如下,已做了注释。 [java] view plain copy
- 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("")) {
- //tempString = tempString.replaceAll(" ", "");
- String start = tempString.substring(0, tempString.indexOf(">") + 1);
- String end = tempString.substring(tempString.lastIndexOf("<") - 2);
- //截取
标签内的内容,从>右括号开始,到左括号减2,取得配置的数字 - Double num = Double.parseDouble
- (tempString.substring(tempString.indexOf(">") + 1,
- tempString.indexOf("") - 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("");
- System.out.println(sw240);
- System.out.println("");
- System.out.println(sw480);
- System.out.println("");
- System.out.println(sw600);
- System.out.println("");
- System.out.println(sw720);
- System.out.println("");
- 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中也有相应的值。
如果喜欢请关注我的微信公众号,扫描左侧或者下方二维码关注我把。有更多干货分享,共同学习进步吧。
文章的URl http://blog.csdn.net/hnzcdy/article/details/50628993
- 顶
- 10
- 踩
更多相关文章
- android中使用sqlite、复制assets下的数据库到SD卡、支持大于1M
- Android应用如何支持屏幕多尺寸多分辨率问题
- Android第十八课 VS源码文件导入Android工程 中文乱码
- Android 主题之安装的APK主题文件
- android中图片的三级cache策略(内存、文件、网络)之三:文件缓存策略
- Android 4.0 Launcher2源码分析——Laucher界面元素分解(主布局文
- 读懂Android (1):使用Android内部的DownloadProvider下载文件,并