摘自:http://www.it165.net/pro/html/201509/54281.html
当您的Android应用即将发布的时候,如果你想让更多的用户去使用你的应用,摆在工程师面前的一个重要问题就是如何让你的应用能在各种各样的终端上运行,这里的各种各样首当其冲的就是不同的屏幕分辨率和尺寸。
屏幕适配主要从图片和距离(文字)进行下手。从以往的方式适配方式中,开发者可能会考虑各种各样的分辨率,比如480*800、1280*800、1920*1080等,为此在资源文件夹里面创建了一大堆子文件夹,那么有什么更好的方式吗?首先我们看下genymotion模拟其中一些流行的镜像的屏幕参数信息: 上面举了两个例子,其实看了好几个发现大部分的屏幕虽然分辨率各种各样,但是dpi最多的就三种:160dpi、240dpi、320dpi 所以为了屏幕适配,我们应该仅仅对dpi做适配即可,这里我们分别对160dpi、240dpi、320dpi进行适配即可满足市场上大部分的需求,以上是图片的解决方案。 同时,光看dpi也不行,也要看对应的屏幕最小宽度,这个最小宽度是和dp对应的,用下列代码既可:1.
Configuration config = getResources().getConfiguration();
2.
int
smallestScreenWidth = config.smallestScreenWidthDp;
3.
L.i(
'smallest width : '
+ smallestScreenWidth);
001.
public
class
DimenTool {
002.
003.
public
static
void
gen() {
004.
005.
File file =
new
File(
'./app/src/main/res/values/dimens.xml'
);
006.
BufferedReader reader =
null
;
007.
StringBuilder sw480 =
new
StringBuilder();
008.
StringBuilder sw600 =
new
StringBuilder();
009.
StringBuilder sw720 =
new
StringBuilder();
010.
StringBuilder sw800 =
new
StringBuilder();
011.
StringBuilder w820 =
new
StringBuilder();
012.
013.
014.
try
{
015.
System.out.println(
'生成不同分辨率:'
);
016.
reader =
new
BufferedReader(
new
FileReader(file));
017.
String tempString;
018.
int
line =
1
;
019.
// 一次读入一行,直到读入null为文件结束
020.
021.
while
((tempString = reader.readLine()) !=
null
) {
022.
023.
if
(tempString.contains(
'</dimen>'
)) {
024.
//tempString = tempString.replaceAll(' ', '');
025.
String start = tempString.substring(
0
, tempString.indexOf(
'>'
) +
1
);
026.
String end = tempString.substring(tempString.lastIndexOf(
'<'
) -
2
);
027.
int
num = Integer.valueOf(tempString.substring(tempString.indexOf(
'>'
) +
1
, tempString.indexOf(
'</dimen>'
) -
2
));
028.
029.
sw480.append(start).append((
int
) Math.round(num *
0.6
)).append(end).append('
030.
');
031.
sw600.append(start).append((
int
) Math.round(num *
0.75
)).append(end).append('
032.
');
033.
sw720.append(start).append((
int
) Math.round(num *
0.9
)).append(end).append('
034.
');
035.
sw800.append(tempString).append('
036.
');
037.
w820.append(tempString).append('
038.
');
039.
040.
}
else
{
041.
sw480.append(tempString).append('
042.
');
043.
sw600.append(tempString).append('
044.
');
045.
sw720.append(tempString).append('
046.
');
047.
sw800.append(tempString).append('
048.
');
049.
w820.append(tempString).append('
050.
');
051.
}
052.
line++;
053.
}
054.
reader.close();
055.
System.out.println(
'<!-- sw480 -->'
);
056.
System.out.println(sw480);
057.
System.out.println(
'<!-- sw600 -->'
);
058.
System.out.println(sw600);
059.
060.
System.out.println(
'<!-- sw720 -->'
);
061.
System.out.println(sw720);
062.
System.out.println(
'<!-- sw800 -->'
);
063.
System.out.println(sw800);
064.
065.
String sw480file =
'./app/src/main/res/values-sw480dp-land/dimens.xml'
;
066.
String sw600file =
'./app/src/main/res/values-sw600dp-land/dimens.xml'
;
067.
String sw720file =
'./app/src/main/res/values-sw720dp-land/dimens.xml'
;
068.
String sw800file =
'./app/src/main/res/values-sw800dp-land/dimens.xml'
;
069.
String w820file =
'./app/src/main/res/values-w820dp/dimens.xml'
;
070.
writeFile(sw480file, sw480.toString());
071.
writeFile(sw600file, sw600.toString());
072.
writeFile(sw720file, sw720.toString());
073.
writeFile(sw800file, sw800.toString());
074.
writeFile(w820file, w820.toString());
075.
}
catch
(IOException e) {
076.
e.printStackTrace();
077.
}
finally
{
078.
if
(reader !=
null
) {
079.
try
{
080.
reader.close();
081.
}
catch
(IOException e1) {
082.
e1.printStackTrace();
083.
}
084.
}
085.
}
086.
}
087.
088.
public
static
void
writeFile(String file, String text) {
089.
PrintWriter out =
null
;
090.
try
{
091.
out =
new
PrintWriter(
new
BufferedWriter(
new
FileWriter(file)));
092.
out.println(text);
093.
}
catch
(IOException e) {
094.
e.printStackTrace();
095.
}
096.
097.
out.close();
098.
}
099.
100.
public
static
void
main(String[] args) {
101.
gen();
102.
}
103.
}