1

我的 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); 从默认值文件中获取值,即英语。

有什么建议么?

4

3 回答 3

0

在AndroidManifest.xml中设置android:configChanges="orientation"为您的活动

这样做将导致您的活动在方向更改时不会被破坏和重新创建。

于 2012-07-25T09:12:56.267 回答
0

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

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

于 2012-07-25T09:19:10.630 回答
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());

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

于 2015-12-23T23:12:25.330 回答