0

Galaxy Tab 2 (10".1) 画面サイズ用に作成されたアプリケーションを Nexus 7 (7") に適応させています。ここのスタックオーバーフローの提案に従って、すべての密度に対して異なる画像サイズを作成し、7 インチ画面用に変更されたレイアウトを含む(l|m|h|xh)dpi特定のフォルダーも作成しました。layout-sw600dp

[編集]

<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" /> そして、Androidmanifestファイルに追加 しました。

[/編集]

これらすべての変更にもかかわらず、2 つのデバイス間で正しくスケーリングするdrawableBottom(および上、左、右) にまだ苦労しています。Buttons

レンダリングされたイメージの物理的なサイズは同じです。そのため、Nexus はアイコンを Galaxy と同じ大きさにしています (またはその逆)。

私が理解したところによると、2 つのデバイスは物理的なサイズは異なりますが、同じ密度のピクセル (xhdpi) を共有しているため、Nexus は xhdpi フォルダーから取得されます。私は何か重要なものを見逃していますか?

drawableBottoms をどのように適応させる必要がありますか?

4

2 に答える 2

0

わかった。

おそらく、これは本来の「THE」ソリューションではありません。しかし、それはすぐに機能し、適応しなければならないアプリケーションのサイズを考慮すると、最小限の労力で済みました。

この次の解決策は基本的に非常にうまく機能しますが、Galaxy Tab 2 と Nexus 7 は同じ解像度を共有しているため、(おそらく) この特定のケースでのみ機能します。

ほとんど作業せずに修正した方法:

  1. 他の多くのデバイスにアプリをインストールする (またはインストールした) 場合を除き、解像度の低い画像は作成しないでください (実際には必要ありません)。
  2. 2 つの値フォルダーを作成します。1 つは Galaxy Tab 2 ( = xlarge) 用、もう 1 つは Nexus 7 ( = large) 用です。修飾子は画面のサイズです。
  3. 各フォルダー内に、それぞれ入力する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

  1. その後、@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;
于 2013-04-07T00:34:12.860 に答える