我正在构建一个有两种语言的应用程序,使用用户可以更改语言的设置活动。一旦用户选择了任何语言,我想保存他/她的选择,这样当应用程序再次启动时,新语言就会出现。我已经完成了与不同语言和不同方向的布局相关的所有事情。
我的问题
当我启动应用程序时,它总是以该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
来自两个值的 Spiner。
一个问题可能是,在设置活动中,当用户按下 时save
,Setting
活动就完成了。在splash
活动中,我检查oncreate
函数中的语言,然后继续活动并在完成多个步骤后完成它。我不认为完成活动是问题,但我只是为了让图像清晰而告诉你。
我该如何解决这个问题?