• 关于屏幕适配的一些看法


    因为分辨率不一样,所以不能用px;因为屏幕宽度不一样,所以要小心的用dp,那么我们可不可以用另外一种方法来统一单位,不管分辨率是多大,屏幕宽度用一个固定的值的单位来统计呢?

    答案是:当然可以。

    我们假设手机屏幕的宽度都是320某单位,那么我们将一个屏幕宽度的总像素数平均分成320份,每一份对应具体的像素就可以了

    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.PrintWriter;
      
    public class MakeXml {
      
        private final static String rootPath = "C:\Users\Administrator\Desktop\layoutroot\values-{0}x{1}\";
      
        private final static float dw = 320f;
        private final static float dh = 480f;
      
        private final static String WTemplate = "[dimen name="x{0}"]{1}px[/dimen]
    ";
        private final static String HTemplate = "[dimen name="y{0}"]{1}px[/dimen]
    ";
      
        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"?]
    ");
            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"?]
    ");
            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 static float change(float a) {
            int temp = (int) (a * 100);
            return temp / 100f;
        }
    }

    代码应该很好懂,我们将一个屏幕宽度分为320份,高度480份,然后按照实际像素对每一个单位进行复制,放在对应values-widthxheight文件夹下面的lax.xml和lay.xml里面,这样就可以统一所有你想要的分辨率的单位了,下面是生成的一个320*480分辨率的文件,因为宽高分割之后总分数和像素数相同,所以x1就是1px,以此类推。

  • 相关阅读:
    bq25896 IINDPM 及 無 IINDPM 時的 regsiter
    不同狀況下的 bq25896 register
    bq25896 charging status CHRG_STAT register 0xB
    快充 IC BQ25896 如何判斷 手機插著 adapter 充電器時,adapter Iout 大於限制,adapter Vout 小於 限制,導致 battery 不但沒充電且還需放電。
    在 kernel 下打出 有帶參數的log。 怪異現象與解決方式。
    mtk flash tool,Win7 On VirtualBox
    java 去最后一位字符 str.substring(0,str.length()-1)
    Windows下Oracle的下载与安装及配置
    关于Java中SQL语句的拼接规则
    <id name="ID"> <generator class="assigned" /> </id>
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5128845.html
Copyright © 2020-2023  润新知