您的位置:首页 > 移动开发 > Android开发

android屏幕适配方案 - dimen生成器

2015-09-10 17:18 507 查看
生成多个 values-宽x高 文件夹,android系统会根据屏幕的尺寸自动读取相应的文件夹下的dimen值,据此来保证在各个屏幕下的显示效果的一致性。以下是生成以320*480为基准的dimen文件,效果图如下:



把这些文件夹放到res下即可。调用的方法:@dimen/x10 or @dimen/y10(屏幕的宽均分320份,高均分480份)

自动生成器代码(文件夹生成路径自己改,红色部分):

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;

public class AllDimen {
privatefinal static StringrootPath = "/Users/Downloads/value_root/values-{0}x{1}";

private finalstatic float dw = 320f;
private finalstatic float dh = 480f;

privatefinal static StringWTemplate = "<dimen name=\"x{0}\">{1}px</dimen>\n";
privatefinal static StringHTemplate = "<dimen name=\"y{0}\">{1}px</dimen>\n";

public static void main(String[] args) {
makeString(320, 480);
makeString(480,800);
makeString(480, 854);
makeString(540, 960);
makeString(600, 1024);
makeString(720, 1184);
makeString(720, 1196);
makeString(720, 1280);
makeString(768, 1024);
makeString(800, 1280);
makeString(1080, 1812);
makeString(1080, 1920);
makeString(1440, 2560);
}

public static void makeString(int w, int h) {

StringBuffer sb = new StringBuffer();
sb.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
sb.append("<resources>");
float cellw =w / dw;
for (int i = 1; i < 320; i++) {
sb.append(WTemplate.replace("{0}",i + "").replace("{1}",
change(cellw * i) + ""));
}
sb.append(WTemplate.replace("{0}","320").replace("{1}", w + ""));
sb.append("</resources>");

StringBuffer sb2 = new StringBuffer();
sb2.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
sb2.append("<resources>");
float cellh =h / dh;
for (int i = 1; i < 480; i++) {
sb2.append(HTemplate.replace("{0}",i + "").replace("{1}",
change(cellh * i) + ""));
}
sb2.append(HTemplate.replace("{0}","480").replace("{1}", h + ""));
sb2.append("</resources>");

String path = rootPath.replace("{0}",h + "").replace("{1}",w + "");
File rootFile = new File(path);
if (!rootFile.exists()) {
rootFile.mkdirs();
}
File layxFile = new File(path,"lay_x.xml");
File layyFile = new File(path,"lay_y.xml");
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));
pw.print(sb.toString());
pw.close();
pw = new PrintWriter(new FileOutputStream(layyFile));
pw.print(sb2.toString());
pw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}

}

public staticfloat change(float a) {
int temp = (int) (a * 100);
return temp / 100f;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: