android 机型适配,屏幕适配

来源:互联网 发布:火车选座软件 编辑:程序博客网 时间:2024/04/29 20:26

还是使用百分比和px相结合的方式


0:首先是以某一个尺寸为基础,例如1920*1080,

那么就将设计上面所有的尺寸都是以这个来标注的

然后把下面的文件复制出来以后运行,java GenerateValueFile 1080 1920

如果要考虑一些特殊的尺寸可以是 java GenerateValueFile 1080 1920 width,height_width,height,记住中间以_来分割的

然后我们会得到相应的x和y的px值,直接使用这个一般就可以了

但是有的时候我们还是要考虑用weight来进行一些比例的分配,


参考:http://blog.csdn.net/lmj623565791/article/details/45460089

import java.io.File;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.PrintWriter;/** * Created by zhy on 15/5/3. */public class GenerateValueFiles {    private int baseW;    private int baseH;    private String dirStr = "./res";    private final static String WTemplate = "<dimen name=\"x{0}\">{1}px</dimen>\n";    private final static String HTemplate = "<dimen name=\"y{0}\">{1}px</dimen>\n";    /**     * {0}-HEIGHT     */    private final static String VALUE_TEMPLATE = "values-{0}x{1}";    private static final String SUPPORT_DIMESION = "320,480;480,800;480,854;540,960;600,1024;720,1184;720,1196;720,1280;768,1024;800,1280;1080,1812;1080,1920;1440,2560;";    private String supportStr = SUPPORT_DIMESION;    public GenerateValueFiles(int baseX, int baseY, String supportStr) {        this.baseW = baseX;        this.baseH = baseY;        if (!this.supportStr.contains(baseX + "," + baseY)) {            this.supportStr += baseX + "," + baseY + ";";        }        this.supportStr += validateInput(supportStr);        System.out.println(supportStr);        File dir = new File(dirStr);        if (!dir.exists()) {            dir.mkdir();        }        System.out.println(dir.getAbsoluteFile());    }    /**     * @param supportStr     *            w,h_...w,h;     * @return     */    private String validateInput(String supportStr) {        StringBuffer sb = new StringBuffer();        String[] vals = supportStr.split("_");        int w = -1;        int h = -1;        String[] wh;        for (String val : vals) {            try {                if (val == null || val.trim().length() == 0)                    continue;                wh = val.split(",");                w = Integer.parseInt(wh[0]);                h = Integer.parseInt(wh[1]);            } catch (Exception e) {                System.out.println("skip invalidate params : w,h = " + val);                continue;            }            sb.append(w + "," + h + ";");        }        return sb.toString();    }    public void generate() {        String[] vals = supportStr.split(";");        for (String val : vals) {            String[] wh = val.split(",");            generateXmlFile(Integer.parseInt(wh[0]), Integer.parseInt(wh[1]));        }    }    private void generateXmlFile(int w, int h) {        StringBuffer sbForWidth = new StringBuffer();        sbForWidth.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");        sbForWidth.append("<resources>");        float cellw = w * 1.0f / baseW;        System.out.println("width : " + w + "," + baseW + "," + cellw);        for (int i = 1; i < baseW; i++) {            sbForWidth.append(WTemplate.replace("{0}", i + "").replace("{1}",                    change(cellw * i) + ""));        }        sbForWidth.append(WTemplate.replace("{0}", baseW + "").replace("{1}",                w + ""));        sbForWidth.append("</resources>");        StringBuffer sbForHeight = new StringBuffer();        sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");        sbForHeight.append("<resources>");        float cellh = h *1.0f/ baseH;        System.out.println("height : "+ h + "," + baseH + "," + cellh);        for (int i = 1; i < baseH; i++) {            sbForHeight.append(HTemplate.replace("{0}", i + "").replace("{1}",                    change(cellh * i) + ""));        }        sbForHeight.append(HTemplate.replace("{0}", baseH + "").replace("{1}",                h + ""));        sbForHeight.append("</resources>");        File fileDir = new File(dirStr + File.separator                + VALUE_TEMPLATE.replace("{0}", h + "")//                        .replace("{1}", w + ""));        fileDir.mkdir();        File layxFile = new File(fileDir.getAbsolutePath(), "lay_x.xml");        File layyFile = new File(fileDir.getAbsolutePath(), "lay_y.xml");        try {            PrintWriter pw = new PrintWriter(new FileOutputStream(layxFile));            pw.print(sbForWidth.toString());            pw.close();            pw = new PrintWriter(new FileOutputStream(layyFile));            pw.print(sbForHeight.toString());            pw.close();        } catch (FileNotFoundException e) {            e.printStackTrace();        }    }    public static float change(float a) {        int temp = (int) (a * 100);        return temp / 100f;    }    public static void main(String[] args) {        int baseW = 320;        int baseH = 400;        String addition = "";        try {            if (args.length >= 3) {                baseW = Integer.parseInt(args[0]);                baseH = Integer.parseInt(args[1]);                addition = args[2];            } else if (args.length >= 2) {                baseW = Integer.parseInt(args[0]);                baseH = Integer.parseInt(args[1]);            } else if (args.length >= 1) {                addition = args[0];            }        } catch (NumberFormatException e) {            System.err                    .println("right input params : java -jar xxx.jar width height w,h_w,h_..._w,h;");            e.printStackTrace();            System.exit(-1);        }        new GenerateValueFiles(baseW, baseH, addition).generate();    }}


0 0
原创粉丝点击