更改方向后,getResources()。getString()不起作用

时间:2012-07-25 09:08:28

标签: android

我的Android应用程序是双语言。所以我有2个res文件夹值和value-sw(斯瓦希里语)。我在设计中以及在运行时从此文件中获取字符串值。例如,在布局中:

android:hint="@string/Officer"

并在代码中:

getResources().getString(R.string.Officer);

要更改区域设置我有我在onCreate()上调用的函数,如下所示:

public void ChangeLanguage(Context ctx,String Language){
        Resources res = ctx.getResources();
        DisplayMetrics dm = res.getDisplayMetrics();
        android.content.res.Configuration config = res.getConfiguration();
        config.locale = new Locale(Language.toLowerCase());
        res.updateConfiguration(config, dm);
}

一切正常。只有在我改变方向时才会出现问题。

例如,在启动时,我将语言设置为斯瓦希里语。所以一切都在斯瓦希里语中。现在,如果我将方向从垂直改为水平或反之亦然。在布局中设置的文本框提示仍然在斯瓦希里语中,我期待。但是getResources()。getString(R.string.Officer);从默认值文件中获取值,即英文。

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

android:configChanges="orientation"设置为 AndroidManifest.xml

中的活动

这样做会导致您的活动在方向改变时不被销毁和重新创建。

答案 1 :(得分:0)

拥有android:configChanges属性的问题在于,在方向更改后禁用onCreate()。你基本上是在告诉应用程序:“我知道会有方向更改,所以不要重新创建屏幕,我会处理它”

我建议用onConfigurationChanged()方法调用你的那个函数。请记住,此时任何视图都将为null,因此如果您需要它们,则需要获得新的参考。

答案 2 :(得分:0)

我在一个应用程序中使用英语和斯瓦希里语与问题中的一个案例相同。 这就是我解决它的方法:我创建了一个名为values-sw的文件夹,然后在我创建了一个名为string.xml的资源文件的文件夹中。这是我所有斯瓦希里语翻译的写作地点。我在onCreate中调用以下方法:

 public static void setLocale(Context context) {
    SharedPreferences sharedPreferences = context.getSharedPreferences(context.getPackageName(), Context.MODE_PRIVATE);
    String userLocale = sharedPreferences.getString("userlocale", null); // adapt to your need
    if (userLocale != null) {
        Locale locale = new Locale(userLocale);
        Locale.setDefault(locale);
        Configuration config = new Configuration();
        config.locale = locale;
        context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
    }
}

不要忘记刷新活动以使更改生效:

finish();
startActivity(getIntent());

(我知道这个答案已经很晚了,我希望它可以帮助那里的人,干杯!)