わかった。
おそらく、これは本来の「THE」ソリューションではありません。しかし、それはすぐに機能し、適応しなければならないアプリケーションのサイズを考慮すると、最小限の労力で済みました。
この次の解決策は基本的に非常にうまく機能しますが、Galaxy Tab 2 と Nexus 7 は同じ解像度を共有しているため、(おそらく) この特定のケースでのみ機能します。
ほとんど作業せずに修正した方法:
- 他の多くのデバイスにアプリをインストールする (またはインストールした) 場合を除き、解像度の低い画像は作成しないでください (実際には必要ありません)。
- 2 つの値フォルダーを作成します。1 つは Galaxy Tab 2 ( = xlarge) 用、もう 1 つは 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;