博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 使用正则表达式来快速生成多套dpi及分分辨率适配的UI
阅读量:5358 次
发布时间:2019-06-15

本文共 2683 字,大约阅读时间需要 8 分钟。

  在Android开发中,往往为了适配dpi和分辨率,要写多套layout或者values,而鉴于dpi和分辨率的计算方式,很多时候适配的大部分工作都是简单的计算方面。譬如DPI从1.5到2.0,就是将所有dip、sp为单位的数值都乘以0.75(也就是1.5/2)。所以我们完成可以自己写一个小工具来批量读取layout或者values文件,然后进行批量操作并保存。

  对文件的批量打开读取操作我这里就不浪费周章了,大家可以自行查阅资料,这里主要贴出核心代码。

  

FileInputStream inputStream = new FileInputStream(subFile);        BufferedReader reader = new BufferedReader(new InputStreamReader(                inputStream));        if (sb == null) {            sb = new StringBuffer();        }        for (String s = reader.readLine(); s != null; s = reader.readLine()) {            // 使用的是逐行读取,所以xml的格式必须每行都是完整的,不然会出现各种意想不到的结果。            String temp = s;            Pattern dpPattern = Pattern.compile("\"(.+?)dp\"");            Matcher dpMatcher = dpPattern.matcher(temp);            System.out.println(s);            if (dpMatcher.find()) {                for (int gNum = 1; gNum <= dpMatcher.groupCount(); gNum++) {                    System.out.println("dp");                    System.out.println(dpMatcher.group(gNum));                    temp = temp.replaceAll(dpMatcher.group(gNum),                            Float.parseFloat(dpMatcher.group(gNum))                                    * CHANGE_RATIO + "");                }            }            Pattern dipPattern = Pattern.compile("\"(.+?)dip\"");            Matcher dipMatcher = dipPattern.matcher(temp);            if (dipMatcher.find()) {                for (int gNum = 1; gNum <= dipMatcher.groupCount(); gNum++) {                    System.out.println("dip");                    System.out.println(dipMatcher.group(gNum));                    temp = temp.replaceAll(dipMatcher.group(gNum),                            Float.parseFloat(dipMatcher.group(gNum))                                    * CHANGE_RATIO + "");                }            }            Pattern spPattern = Pattern.compile("\"(.+?)sp\"");            Matcher spMatcher = spPattern.matcher(temp);            if (spMatcher.find()) {                for (int gNum = 1; gNum <= spMatcher.groupCount(); gNum++) {                    System.out.println("sp");                    System.out.println(spMatcher.group(gNum));                    temp = temp.replaceAll(spMatcher.group(gNum),                            Float.parseFloat(spMatcher.group(gNum))                                    * CHANGE_RATIO + "");                }            }            sb.append(temp + "\n");        }

 通过上述代码,我们可以发现逻辑很简单,就是找出“xxxdp”里面xxx的值,然后乘以一个转化系数CHANGE_RATIO而已,当我们要将dpi从1.5转成2.0的时候,就可以这么做了~该正则表达式适用于批量修改layout里的数值。如果是修改values里的dimens数值的话,我们可以将对应语句换为

Pattern dpPattern = Pattern.compile(">(.+?)dp<");

  大家可以多开发一点这样的小工具,来提高平时的工作效率~

  

转载于:https://www.cnblogs.com/blairsProgrammer/p/4220929.html

你可能感兴趣的文章
使用cookie解决微信不能存储localStorage的问题
查看>>
HTML学习摘要4
查看>>
Entity Framework4.2 (十)CodeFirst(EF4 .2的Code First方法)
查看>>
Intellij IDEA 部署 项目在tomcat 原理
查看>>
nodejs 模块以及加载机制,主要讨论找不到模块的问题
查看>>
easyui-combox(tagbox) 多选操作 显示为tagbox
查看>>
C#给枚举增加一个Attribute,并通过反射获取Attribute的值。(借鉴)
查看>>
更新一下缺省源
查看>>
自定义AccessDeniedHandler
查看>>
js如何在浏览器添加cookie(添加、获取、删除)
查看>>
LINUX 线程函数大全(转)
查看>>
django中的save(commit=False)
查看>>
第二次作业
查看>>
kubernetes高级之动态准入控制
查看>>
SALT.STATES.CRON(states的crontab管理)
查看>>
老李秘技:LoadRunner支持参数文件极限是多大
查看>>
持续集成:TestNG中case之间的关系
查看>>
Eclipse常用快捷键
查看>>
bzoj4542[HNOI2016]大数(莫队)
查看>>
高可用Hadoop平台-答疑篇
查看>>