アプリの一部で、次を使用して画面密度を確認します。
float sdpi = ApplicationConstants.ref_currentActivity.getResources().getDisplayMetrics().density;
if(sdpi == 0.75)
{
ApplicationConstants.screenSize = "small";
}
else if(sdpi == 1.0)
{
ApplicationConstants.screenSize = "medium";
}
else if(sdpi == 1.5)
{
//Message.inform("Setting Screen Size", "sdpi is:" + sdpi + " so screen size is large");
ApplicationConstants.screenSize = "large";
}
else if(sdpi == 2.0)
{
ApplicationConstants.screenSize = "xlarge";
}
その後、別の部分で、screenSize に基づいて適切な画像ビットマップをロードするメソッドを単純に作成します。
if(ApplicationConstants.screenSize.equals("small"))
{
imageName = imageName + "s";
}
else if(ApplicationConstants.screenSize.equals("medium"))
{
imageName = imageName + "m";
}
else if (ApplicationConstants.screenSize.equals("large"))
{
imageName = imageName + "l";
//Message.inform("ImageName should have an l at the end", imageName );
}
else imageName = imageName + "x";
したがって、基本的に-私がfindImageByName( "SomeImage")を呼び出す場合、画像名は画面密度に基づいてSomeImages(small)、SomeImagem(medium)、SomeImagel(large)、SomeImagex(xlarge)に変更されます-そして、imageNameを使用しますjarファイルから抽出した画像からドローアブルを作成します。
私の mdpi 画面デバイスでは正常に動作することがわかりますが、エミュレータでは本来あるべき場所に画像が表示されません。
どこかでばかげた間違いをしたのではないかと思ったので、sdpiが1.5の場合でもApplicationConstants.screenSizeを「中」に変更しましたが、エミュレーターの実行時に画像が読み込まれません。
誰もこの問題を抱えたことがありますか?
注: この方法で画像をロードする理由は、それがモジュラー ImageLoader クラスであり、jar ファイルから画像をロードするためです。jar ファイルには、 DexClassLoader を使用して実行時に動的にロードする .class に必要な画像が含まれています。動的モジュールのロードのプロセスについて質問がある場合は、お気軽にお問い合わせください。私がこのように画像をロードする理由を説明します。
どんな助けでも大歓迎です:)仲間のStackOverflowers。
注: 現在、hdpi の実生活の Android デバイスにアクセスすることはできません。
編集:
エミュレーターで動作させることができましたが、これは状態を使用していません...ボタンがクリックされているように見えるようにするために、最終的にボタンで使用する必要があります。
機能するものは次のとおりです。
b[i].setBackgroundDrawable(ApplicationConstants.moduleImageLoader.findImageByName(drawable_normal));
そして、これがうまくいかないものです:しかし、そうすべきです!
states.addState(new int[] {}, ApplicationConstants.moduleImageLoader.findImageByName(drawable_normal)); b[i].setBackgroundDrawable(states);
b はボタンの配列です。ApplicationConstants.modularImageLoader は、現在のモジュールの正しい imageLoader を取得します。findImageByName は、「imageName」を取り、画面密度に基づいて s、m、l、x を追加し、その名前に一致するドローアブルを返します (つまり、私のモジュールである jar 内のその名前の画像ファイルです)。ModularImage ローダーは、モジュール ローダーと連携して動作します。対応するモジュールに適切な imageLoader を確実にロードします。
このシナリオで状態が機能しない理由は何ですか? どんな助けでも大歓迎です...状態を間違って使用していますか?