首页 > 代码库 > Android 使用正则表达式来快速生成多套dpi及分分辨率适配的UI
Android 使用正则表达式来快速生成多套dpi及分分辨率适配的UI
在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<");
大家可以多开发一点这样的小工具,来提高平时的工作效率~
Android 使用正则表达式来快速生成多套dpi及分分辨率适配的UI
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。