安卓适配一直是安卓开发者的一块心头大恨,还好安卓5.0提供了万能适配法,具体可参照张鸿阳的万能适配器,然而对于电视或者当下大火的物联网开发来说不一定行得通,因为物联网开发小伙伴的伴生机器还是4+,因此还是老老实实的用多个values 。
使用帮助:
1.创建其他values 资源文件和下面的dimin
2.启用核心代码(右键,以java 的方式运行,记得加文件读写权限),生成多少倍自己设定
基础知识普及
1.sw
最小宽度为准,如实际屏幕是480*800 ,有values-sw900dp和values-sw720dp,values-sw420dp那么实际采用的就是values-sw420dp的dimin
2.sw和w
在资源:value-w1280dp,value-w800dp,时,横屏下使用value-w1280dp的资源,竖屏使用value-w800dp的资源。
在资源:value-sw800dp,value-sw1080dp时,横屏下使用value-sw800dp的资源,竖屏下仍然使用value-sw800dp的资源。
在上诉四中资源同时存在,则优先采用sw资源,value-sw800dp
//*************************************************************
//核心代码
public class DimenTool {
public static void gen() {
File file = new File("./app/src/main/res/values/dimens.xml");
BufferedReader reader = null;
StringBuilder sw900 = new StringBuilder();
StringBuilder sw1024 = 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);
int num = Integer.valueOf(tempString.substring(tempString.indexOf(">") + 1, tempString.indexOf("</dimen>") - 2));
sw900.append(start).append((int) Math.round(num * 1.2)).append(end).append("\n");
sw1024.append(start).append((int) Math.round(num * 1.5)).append(end).append("\n");
} else {
sw900.append(tempString).append("\n");
sw1024.append(tempString).append("\n");
}
line++;
}
reader.close();
String sw900file = "./app/src/main/res/values-sw900dp/dimens.xml";
String sw1024file = "./app/src/main/res/values-sw1024dp/dimens.xml";
writeFile(sw900file, sw900.toString());
writeFile(sw1024file, sw1024.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();
}
}