我正在为Galaxy Tab 2(10“.1)屏幕尺寸编写的应用程序改编为Nexus 7(7”)。
根据stackoverflow中的建议,我为所有密度(l|m|h|xh)dpi
和特定layout-sw600dp
文件夹创建了不同的图像大小,其中包含我为7英寸屏幕修改的布局。
[编辑]
我补充说
<supports-screens android:anyDensity="true"
android:largeScreens="true"
android:normalScreens="true"
android:resizeable="true"
android:smallScreens="true" />
到我的Androidmanifest
文件。
[/编辑]
尽管进行了所有这些修改,我仍然在努力让drawableBottom
(以及顶部,左侧,右侧)Buttons
在两个设备之间正确缩放。
渲染图像的物理尺寸相同。因此,Nexus正在制作与Galaxy一样大的图标(或反之亦然)。
根据我的理解,这两个设备虽然具有不同的物理尺寸,但它们共享相同的像素密度(xhdpi),这使得Nexus从xhdpi文件夹中获取。 我错过了一些重要的事情吗?
我应该如何调整drawableBottoms?
答案 0 :(得分:0)
您确定该应用是专为高密度显示屏设计的吗?尝试在权限后将其添加到您的清单中:
<supports-screens android:largeScreens="true"
android:normalScreens="true"
android:smallScreens="true"
android:anyDensity="true"/>
答案 1 :(得分:0)
行。
可能这不是“解决方案”,因为它应该是。但它直接对我有用,并且最小努力考虑了我必须适应的应用程序的大小。
以下解决方案基本上可以很好地工作,但(可能)仅适用于此特定情况,因为Galaxy Tab 2和Nexus 7共享相同的分辨率。
我如何修复它几乎没有工作:
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;