好的。
可能这不是预期的“THE”解决方案。但它立即对我有用,并且考虑到我必须适应的应用程序的大小,只需付出最小的努力。
以下解决方案基本上可以很好地工作,但(可能)仅适用于这种特定情况,因为 Galaxy Tab 2 和 Nexus 7 共享相同的分辨率。
我如何在几乎没有工作的情况下修复它:
- 不要创建较小分辨率的图像(您并不真的需要它),除非您要在许多其他设备上安装(或已经安装)您的应用程序。
- 创建两个值文件夹。一个用于 Galaxy Tab 2 (= xlarge),另一个用于 Nexus 7 (= large)。修饰符是屏幕的大小。
- 在每个文件夹中放置一个
dimen.xml
文件,您将分别填写该文件。
对于 Galaxy Tab 2:
<?xml version="1.0" encoding="utf-8"?>
<resources>
[...]
<dimen name="s25sp">25sp</dimen>
<dimen name="s30sp">30sp</dimen>
<dimen name="s35sp">35sp</dimen>
[...]
<dimen name="s25dp">25dp</dimen>
<dimen name="s30dp">30dp</dimen>
<dimen name="s35dp">35dp</dimen>
[...]
</resources>
对于 Nexus 7:
<?xml version="1.0" encoding="utf-8"?>
<resources>
[...]
<dimen name="s25sp">17sp</dimen>
<dimen name="s30sp">21sp</dimen>
<dimen name="s35sp">24sp</dimen>
[...]
<dimen name="s25dp">17dp</dimen>
<dimen name="s30dp">21dp</dimen>
<dimen name="s35dp">24dp</dimen>
[...]
</resources>
Nexus 7 的每个值的获取方式如下: Galaxy_value/10.1*7
- 之后,您必须在
@dimen/s[0-9]*dp
要使用该特定维度时使用。
PS:如果你有一个大型应用程序已经格式化了许多布局,你可以使用这个PERL
脚本将每个 [0-9]*dp 和 [0-9]*sp@dimen/s[0-9]*dp
@dimen/s[0-9]*sp
自动转换为。这里是:
#!/usr/bin/perl
$filename = $ARGV[0];
open (FILE, $filename);
while (<FILE>) {
chomp;
if ( $_ =~ /\"[0-9]*(di?p|sp)\"/) {
my $pre = $`;
my $mat = $&;
my $pos = $';
$mat =~ s/["]+//g;
print "$pre\"\@dimen/s$mat\"$pos\n";
} elsif ( ($_ !~ /\"[0-9]*dp\"/) && ($_ !~ /\"[0-9]*sp\"/) ) {
print "$_\n";
}
}
close (FILE);
exit;