Android更改本地配置不起作用

时间:2013-08-19 11:26:14

标签: android android-configchanges

我正在使用设置活动构建一个有两种语言的应用程序,用户可以在其中更改语言。一旦用户选择了任何语言,我想保存他/她的选择,以便在再次启动应用程序时,将出现新语言。我已经完成了与不同语言和不同方向的布局相关的所有事情。

我的问题

当我启动应用程序时,它总是以English语言启动,尽管我打印的是区域设置语言,结果是Arabic

提示

当用户从设置活动更改语言并且他/她按下保存时,应用程序将以新语言完美地运行。不幸的是,重新启动应用程序时,它不会以这种新语言启动。

我的代码

Tags.java - 包含三个字符串的类:

public class Tags {
    public final static String LANGUAGE = "Language";
    public final static String ENGLISH_LANGUAGE = "en";
    public final static String ARABIC_LANGUAGE = "ar";
}

启动活动 - 应用程序启动的活动:

someData = getSharedPreferences(filename, 0);
android.content.SharedPreferences.Editor editor = someData.edit();
if (!someData.contains(Tags.LANGUAGE)) {
    editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
    Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
    Locale.setDefault(locale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
    String currentLanguage = someData.getString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
    Setting.setLanguage(currentLanguage);
    Log.e("currnetLanPHone", Setting.getLanguage());
    if (currentLanguage.equalsIgnoreCase(Tags.ENGLISH_LANGUAGE)) {
        Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
        Locale.setDefault(locale);
        android.content.res.Configuration config = new android.content.res.Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    } else {
        Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
        Locale.setDefault(locale);
        android.content.res.Configuration config = new android.content.res.Configuration();
        config.locale = locale;
        getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    }
}
editor.commit();

这让我感到困惑,因为正如我之前所解释的那样,当我从Setting activity更改语言时,应用程序的语言会发生变化并且新的布局会加载。

我确信您会要求我提供Setting activity的代码,以便将我在该活动中所做的工作与启动活动进行比较。此代码如下:

设置活动

if (s_language.getSelectedItem().toString().equalsIgnoreCase("English")) {
    editor.putString(Tags.LANGUAGE, Tags.ENGLISH_LANGUAGE);
    Locale locale = new Locale(Tags.ENGLISH_LANGUAGE);
    Locale.setDefault(locale);
    Log.e("Inside", Tags.ENGLISH_LANGUAGE);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Setting.setLanguage(Tags.ENGLISH_LANGUAGE);
} else {
    editor.putString(Tags.LANGUAGE, Tags.ARABIC_LANGUAGE);
    Locale locale = new Locale(Tags.ARABIC_LANGUAGE);
    Locale.setDefault(locale);
    android.content.res.Configuration config = new android.content.res.Configuration();
    config.locale = locale;
    getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
    Setting.setLanguage(Tags.ARABIC_LANGUAGE);
}
editor.commit();

代码非常简单,我使用了两个值的脊柱s_language

问题可能是,在设置活动中,当用户按下save时,Setting活动就完成了。在splash活动中,我会在继续活动之前检查oncreate函数中的语言,然后在执行一系列步骤后完成此操作。我不认为完成活动是问题,但我只是告诉你,以使图像清晰。

如何解决此问题?

0 个答案:

没有答案