1

次のようなレイアウトがあります。

 <LinearLayout>
     <ImageView>
     android:width="wrap_content"
     android:height:"wrap_content"
      ...
     </ImageView>

     <ImageView>
     android:width="wrap_content"
     android:height:"wrap_content"
      ...
     </ImageView>

     <ImageView>
     android:width="wrap_content"
     android:height:"wrap_content"
      ...
     </ImageView>

     <ImageView>
     android:width="wrap_content"
     android:height:"wrap_content"
      ...
     </ImageView>
 </LinearLayout>

画像のサイズは、540x960、275ppi の画面で画面いっぱいに収まるように設定されています。しかし、エミュレーターでアプリを実行すると、最後の画像がつぶれてしまいます。

Supporting Multiple Screensドキュメントを読んだ後、「wrap_content」の代わりに dp で画像のサイズを指定すると、さまざまな密度の画面をカバーできることがわかりました。

しかし、さまざまなサイズの画面についてはどうでしょうか。たとえば、ピクセル密度が同じでサイズの異なる 2 つの画面がある場合、一方の画面には画像が収まるが、もう一方の画面には収まらないという状況が発生する可能性があります。2 つの異なるレイアウトを使用することが唯一の解決策ですか?

たとえば、2 つの異なるサイズ (ただし密度は同じ) の画面では、100 と 200 の垂直ピクセルが使用可能で、画像のサイズが 150 dps であるため、最初の画面には収まりません。私は正しいですか?

前もって感謝します

4

2 に答える 2

2

ウィンドウ全体を設定されたビットマップで埋めようとするほとんどすべての Android アプリは、トリミング、スケーリング、または覆われていない領域を残すことをいとわずに失敗する運命にあります。非常に多くの異なるアスペクト比と画面サイズがあるため、一連のコンテンツを魔法のように固定されたアスペクト比とサイズに合わせることは不可能です。異なるサイズの画面を処理する別のレイアウトを提供しても、問題を実際に解決することはできません。これは、カバーした 2 つの両方とは異なる画面サイズを持つ 3 番目のデバイスがどこかにあることは間違いないためです。

忠実度を失わずに引き伸ばしたりトリミングしたりできる部分を含む一連の画像を使用することを検討してください。それは単なる単色、グラデーション、繰り返しパターン、またはその他のものかもしれません. または、必要に応じてスクロールを許可することもできます。これはすべて、コンテンツと達成しようとしていることに依存します。

于 2012-06-14T17:23:06.613 に答える
1

android:scaleTypeの属性に注目してくださいImageView。デフォルトでは、システムFIT_CENTERは値 fromを使用して画像をスケーリングしますImageView.ScaleType。この場合、システムは画像の元の縦横比を維持し、幅または高さのいずれかのデバイスの側面に完全に収まるようにします。

編集:

すみません、大きな間違いをしました。ImageView画像は、その側面の 1 つに完全に収まります。

于 2012-06-14T17:27:48.843 に答える