0

ログイン画面のあるアプリがあります。その画面には、会社のロゴがあります。

最初に、レイアウト フォルダーとドローアブル フォルダーを 1 つずつ作成しました。私はテストし、すべて正常に動作しました。

次に、4 つのレイアウト フォルダー (normal、large、small、xlarge) と 4 つの drawable フォルダー (hdpi、ldpi、mdpi、xhdpi) を追加しました。logo.png と main_layout.xml を各フォルダーにコピーしました (これは間違っていますが、テスト用でした)。もちろん、それぞれの異なる画面サイズのエミュレーターでアプリをテストすると、ロゴ画像が間違った位置に表示されたり、変形したりします (大きくなったり小さくなったり、位置が悪いなど)。異なる png ファイルを作成しておらず、異なるサイズに合わせてレイアウトを調整していないため、その通りです。

したがって、次のステップは、設計領域と話し合い、各密度で 4 つの png ファイルを要求し、「4 つのレイアウト」を確認することでした。

4 つの png ファイルとレイアウトを修正したら、4 つのエミュレーター (通常の画面用、大画面用、特大画面用、小画面用) を使用してアプリを再度テストしました。そして、まだ私が望むようには機能しません。

場合によっては、logo.png が必要なものよりも大きく表示されます。その他では 小さく表示されます。何をしなければならないのかわかりません。私は wrap_content を使用し、4 つのドローアブル フォルダー (hdpi、ldpi、mdpi、xhdpi) を作成します。サイズの異なる 4 つの logo.png ファイルがあります。

しかし、QVGA エミュレーター (たとえば) で画像を見ると、巨大な画像が表示されます。

異なるレイアウトが画面サイズ用であり、異なる png が異なる密度用である場合、小さいまたは大きい画像 (png) を使用するにはどうすればよいですか??

私の貧弱な英語に感謝し、申し訳ありません

4

2 に答える 2

1

このタイプの問題は通常、非常にケース固有です。

しかし、一般的なアプローチは、レイアウトを 1 つだけにすることです。このレイアウト内のディメンション値は、/values/ フォルダー内の dimens.xml ファイルに配置されます。4 つの .png (ldpi、mdpi、hdpi、xhdpi) を作成し、それらの比率が正しいことを確認してください。(Android 開発者の Web サイトを再確認して、正しい比率を確認してください。

そして、このセットアップでテストした後、整列していないものがある場合は、その画面サイズ (小、大など) 用のdimens.xmlを作成し、実際に変更したい寸法のみを追加します。

テストする前に、すべての寸法またはすべてのレイアウトを追加しないでください。通常は、基本的なものから始めて、必要に応じてリソースを追加する方が簡単です。

于 2013-04-08T14:36:38.937 に答える
0

私はあなたを助けるかもしれないし、助けないかもしれない同様の問題を抱えていました。特定のサイズで mjpeg ストリームを読み込もうとしましたが、サイズを変更したウィンドウに完全に収まることはありませんでした。この問題は、多くのデバイスのピクセル密度が OS が報告するものと正確に一致しないという事実に帰着しました。たとえば、OS は mdpi を 160 dpi と報告する場合がありますが、デバイスの実際の dpi は 164 です。したがって、1 つの非常に大きな *.png を使用し、実行時にサイズを変更する場合は、「標準」スケーリングを使用しないでください。係数 (つまり、1、2、4 など) を使用し、代わりに

float factor = getResources().getDisplayMetrics().density;

//To get width/height of the View 
int width = view.getWidth(); //a fixed width would be preferred over this
int realwidth = (int) Math.round(width/factor);

サイズ変更は自動的に行われますが、OS に処理させると目的の結果が得られない場合があることに注意してください。

これはまさにあなたが求めたものではありませんが、drawable を 1 つだけにすることに決めた場合は、頭痛の種を避けることができれば幸いです。

于 2013-04-08T14:52:51.433 に答える