Locale以编程方式更改,但app在Android 2.3.3上的系统默认语言环境中显示

时间:2013-03-11 11:23:59

标签: android android-layout android-intent android-emulator android-fragments

我的设备系统为英语

在我的 AndroidManifest.xml 中,我定义了我的活动以检查配置更改:

<activity
   ...
   android:configChanges="locale" >

在我的活动中,我添加了以下功能:

@Override
public void onConfigurationChanged(Configuration newConfig) {

      super.onConfigurationChanged(newConfig);



       Locale.setDefault(newConfig.locale);

       Log.v("*Locale is*", newConfig.locale.toString());

       getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());

}

在我的活动 onResume()中,我调用了上述功能:

@Override
public void onResume() {
    super.onResume();

     // I explicitely force my app to display in Finnish
     Configuration newConfig = new Configuration();
     newConfig.locale = new Locale("fi");
     onConfigurationChanged(newConfig);
}

(我的活动托管片段,每个屏幕视图都是片段。)

使用上面的代码,我想我的应用程序将在启动时以芬兰语显示。它适用于 Android 4.1.1

但是当我在 Android 2.3.3 设备上运行我的应用时,会发生以下情况:

场景1:从桌面启动应用==&gt;该应用程序以芬兰语显示,没问题

场景2:登录我的应用,==&gt;然后关闭app ==&gt;然后,再次从桌面启动应用程序==&gt;该应用程序显示英文!!为什么???

(日志消息Log.v("*Locale is*", newConfig.locale.toString());始终显示“ fi ”!)

我验证了在方案2中,当桌面再次启动时,应用始终显示系统默认区域设置。为什么呢?

我不知道为什么在我的场景2中,我的应用程序以系统区域设置显示英语....任何人都可以提供帮助吗?

2 个答案:

答案 0 :(得分:2)

您可以像

一样实际更改语言环境
public void setDefaultLocale(Context context, Locale locale) {
        Locale.setDefault(locale);
        Configuration appConfig = new Configuration();
        appConfig.locale = locale;
        context.getResources().updateConfiguration(appConfig,
                context.getResources().getDisplayMetrics());
        System.out.println("trad" + locale.getLanguage());
    } 

并将此方法称为

setDefaultLocale(getBaseContext(), Locale.FRENCH);

setDefaultLocale(getBaseContext(), Locale.TRADITIONAL_CHINESE);

setDefaultLocale(getBaseContext(), Locale.ITALIAN);

您可以选择要更改的语言,并启动当前活动以反映更改。

Intent intent = new Intent(this,YourActivity.class);         startActivity(意向);

嗨约翰,我在我身边测试以克服你的情景-2 并且在实际更改语言环境并转到主屏幕并再次启动我的应用程序之后,它仍然是我改变的语言,即意大利。

我在此link

中发布了代码

请仔细阅读并告知我这对您有用。

答案 1 :(得分:0)

看起来像Android 2.x中的一些错误

因为如果您更改的区域设置不在onCreate()但在createMenu()或某些spinner.setOnItemSelectedListener()内,则可以使用。

这是解决方法,但尝试在启动应用程序后调用某个事件并更改其中的区域设置。