3

と を使用してアプリを作成しています (デフォルトの言語は EN ではありませんandroid:minSdkVersion="8") android:targetSdkVersion="15"

私は私のimage.png内部を持っていますdrawable-mdpi

私は現在英語をサポートしているので、文字列の翻訳を含むファイルを含むvalues-en-rUSフォルダーを作成しました。strings.xml

アプリを実行してデバイスの言語を英語 (米国) に変更すると、翻訳された文字列が表示され、アプリは期待どおりに動作します。

アプリが英語で表示されている場合に別の画像が必要なのでdrawable-en-rUS-mdpiimage.png内部のフォルダーを作成しました。「英語モード」でアプリを実行すると、画像が読み込まれるはずでしたdrawable-en-rUS-mdpiが、そうではありません。

ファイルエクスプローラーを使用してアプリを視覚化すると、フォルダーdrawable-en-US-mdpiが作成され、画像が中にあることがわかります。

私は何か間違ったことをしていますか?

4

1 に答える 1

2

私の読んだところ、あなたの問題は私のものと同じだったようです(ロケールの変更時にローカライズされたリソースで画像を更新します)。

私のコード(簡略化)は次のようなものでした:

ImageView flag = (ImageView) findViewById(R.id.flagImage);
flag.setImageResource(R.id.flagImage);

invalidate() と refreshDrawableState() およびその他のいくつかのシェナニガンについて読んで試した後、問題の解決策が得られた別のスレッドImageView が変更を更新/反映していないことがわかりました ( hereおよびhere )。

描画されている画像の resID または URI を変更しない場合、影響を受ける可能性のある他の要因が変更されても (たとえば、ロケールなど)、ImageView 自体は更新されないようです。私の問題の解決策は、ImageView にnullドローアブルを設定する行を追加することでした。

ImageView flag = (ImageView) findViewById(R.id.flagImage);
flag.setImageDrawable(null);   //This will force the image to properly refresh
flag.setImageResource(R.drawable.flag);
于 2013-03-17T14:21:22.307 に答える