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

Android 智能屏幕适配工具,便捷有效(改进版,解决很多资源没有用占用空间)

2015-10-16 18:18 411 查看
此工具参考了其他的屏幕适配方法,改进而来的。

主要原理是以一个分辨率为基准,我这边以1280*720为例子,并且我的手机是该分辨率。美工切图也是这个分辨率。

这样切图后,在1280*720效果肯定是符合的。

如果我们把它放到2560*1440分辨率上面他会是怎么样的效果呢?

比如在1280*720 宽度为
720px 刚好是 满宽

那在2560*1440上面, 则是
1440/720 *
720px=1440 结果在此分辨率上依然是 满屏

其实就是以720p 为基准,在不同的分辨率相对比例。

使用方法如下:

C:\screen\res 这里面将会生成 对应的分辨率不同文件

C:\screen\src 这里放2个文件:(我们以1280 720分辨率为基准)

dimens_h.xml //高度的px

dimens_w.xml //宽度的px 这里面就按平时的写进去即可

将文件放好后,运行jar即可,自动生成文件



源码如下,源码很简单,最好大家看下,方便自己也捣鼓捣鼓。

package com.example.administrator.customscrollview;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

/**
* Created by ferris
* 2015年10月16日 18:00:30
* 459821731@qq.com
*/
public class ScreenMain {
private int baseW;
private int baseH;
private String dirStr = "c:/screen/res";
private String inputSrc="c:/screen/src";
private String inputStrW="c:/screen/src/dimens_w.xml";
private String inputStrH="c:/screen/src/dimens_h.xml";
private final static String WTemplate = "<dimen name=\"{0}\">{1}px</dimen>\n";
private final static String HTemplate = "<dimen name=\"{0}\">{1}px</dimen>\n";
private final static String VALUE_TEMPLATE = "values-{0}x{1}";
private static final String SUPPORT_DIMESION = "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 List<SizeBeam> currentSizesW,currentSizesH;
public ScreenMain(int baseX, int baseY) {
this.baseW = baseX;
this.baseH = baseY;
File dir = new File(dirStr);
if (!dir.exists()) {
dir.mkdirs();
}
File inputSrcf = new File(inputSrc);
if (!inputSrcf.exists()) {
inputSrcf.mkdirs();
}

}

public void generate() {

if(currentSizesW==null||currentSizesW.size()<=0){
return;
}
String[] vals = SUPPORT_DIMESION.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>\n");
float cellw = w * 1.0f / baseW;//把当前的宽度,按720分,每份占用多少

for (int i = 0; i < currentSizesW.size(); i++) {
sbForWidth.append(WTemplate.replace("{0}", currentSizesW.get(i).getName()).replace("{1}",
change(cellw * currentSizesW.get(i).getSize()) + ""));
}

sbForWidth.append("</resources>");

StringBuffer sbForHeight = new StringBuffer();
sbForHeight.append("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
sbForHeight.append("<resources>\n");
float cellh = h *1.0f/ baseH;

for (int i = 0; i < currentSizesH.size(); i++) {
sbForHeight.append(HTemplate.replace("{0}", currentSizesH.get(i).getName()).replace("{1}",
change(cellh * currentSizesH.get(i).getSize()) + ""));
}

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(), "dimens_w.xml");
File layyFile = new File(fileDir.getAbsolutePath(), "dimens_h.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 void AnalyticalXml() {
File dirW = new File(inputStrW);
if (!dirW.exists()) {
System.out.print("请放入dimens_w.xml");
return;
}

File dirH = new File(inputStrH);
if (!dirH.exists()) {
System.out.print("请放入dimens_h.xml");
return;
}

try {
currentSizesW=readXML(dirW);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

try {
currentSizesH=readXML(dirH);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

public static List<SizeBeam> readXML(File dir) throws Exception {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document document = db.parse(dir);
NodeList list = document.getElementsByTagName("dimen");
int size = list.getLength();
List<SizeBeam> sizes = new ArrayList<SizeBeam>();
for (int i = 0; i < size; i++) {

Element element = (Element) list.item(i);

String name = element.getAttribute("name");
String px = element.getFirstChild().getTextContent();
if (px.endsWith(px)) {
px = px.substring(0, px.length() - 2);
}
sizes.add(new SizeBeam(name, Float.parseFloat(px)));
}
return sizes;

}

public static void main(String[] args) {
int baseW = 720;
int baseH = 1280;
ScreenMain run= new ScreenMain(baseW, baseH);
run.AnalyticalXml();
run.generate();
}
}


http://download.csdn.net/detail/xufeifandj/9187399

项目下载地址
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: