更改语言环境后图片无法加载

3

我正在创建一个应用程序(默认语言不是英语),使用android:minSdkVersion="8"android:targetSdkVersion="15"

我的image.png位于drawable-mdpi中。

由于我现在支持英语,我创建了一个values-en-rUS文件夹,并在其中放置了一个strings.xml文件来进行字符串翻译。

现在,如果我运行我的应用程序并将设备语言更改为英语(美国),则会显示翻译后的字符串,并且应用程序按预期工作。

由于我想要在应用程序以英语显示时使用不同的图像,因此我创建了drawable-en-rUS-mdpi文件夹,并将image.png放在其中。但是当我在“英语模式”下运行应用程序时,它应该加载drawable-en-rUS-mdpi中的图像,但实际上没有。

如果我使用文件浏览器查看应用程序,则可以看到一个名为drawable-en-US-mdpi的文件夹已被创建,图像位于其中。

我做错了什么吗?


你是如何动态创建drawable文件夹的?在res/drawable-en-mdpi目录下创建文件夹。 - Padma Kumar
@PadmaKumar 你好。我相信我已经在Windows资源管理器上创建了文件,在Eclipse中按F5然后清理项目。 - Favolas
如果您的应用程序将美式英语和英式英语视为相同,则请删除rUS限定符并重试。 - yrajabi
@yrajabi 谢谢,但那并没有解决我的问题。 - Favolas
1个回答

2

据我所了解,您的问题与我的问题相同(在更改本地化设置时使用本地化资源进行图像刷新)。

我的代码(简化版)如下:

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

在尝试了invalidate()、refreshDrawableState()和其他一些方法后,我发现了另一个线程ImageView not refreshing/reflecting changes,在那里我找到了解决我的问题的方法(这里这里)。

似乎,如果您不改变正在绘制的图像的resID或URI,即使其他可能影响到它的因素已经改变(例如locale),ImageView本身也不会更新。我的问题的解决方案是添加一行代码,将ImageView设置为null drawable:

ImageView flag = (ImageView) findViewById(R.id.flagImage);
flag.setImageDrawable(null);   //This will force the image to properly refresh
flag.setImageResource(R.drawable.flag);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接