在应用程序中强制“locale”

时间:2011-01-14 21:27:18

标签: android locale

我想旋转手机并保留区域设置。我有文件夹值,值 - en 和值 - hr 。在我的每项活动中

android:configChanges="keyboardHidden|orientation|locale"

并且在每个 activity.java 文件中

private Locale locale = null;

@Override
public void onConfigurationChanged(Configuration newConfig)
{
    super.onConfigurationChanged(newConfig);
    if (locale != null)
    {
        newConfig.locale = locale;
        Locale.setDefault(locale);
        getBaseContext().getResources().updateConfiguration(newConfig, getBaseContext().getResources().getDisplayMetrics());
    }
}

和onCreate

    SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(this);               
    Configuration config = getBaseContext().getResources().getConfiguration();

    String lang = settings.getString("language","en");
    if (! "".equals(lang) && ! config.locale.getLanguage().equals(lang))
    {
        locale = new Locale(lang);
        Locale.setDefault(locale);
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }

直到我旋转手机才能工作 - 应用程序仍在工作,按钮和一切都很好 - 但是语言环境变得很奇怪 - 有时这是我的语言环境(hr)有时它(en)......

我还需要添加什么?

1 个答案:

答案 0 :(得分:1)

我只是删除了“if's”,现在一切正常。是的,每次“重新强制”一个地方都有点“笨重”,但我找不到另一种方式。

我的解决方案有点不同,我只是在onCreate和onConfigChange上“重新强制”它 - 不是每100毫秒左右,而是在Desire(2.2)它完美无缺地工作。

@Austyn

是的,这几乎是同一个问题,但除了“100ms强迫”之外我还有其他解决方案。

@Mayra

用户想拥有他们的母语(HR),但在(当前)手机中不支持所以这是唯一的方法 - 强迫它= /