当我的应用程序被安装后,在第一次运行时会要求用户选择语言;但是如果用户在第二次开始使用应用程序,则语言会自动设置为先前选择的语言。
问题是,在第一次运行时,用户选择语言后,应用程序仍然是英文的(无论用户选择了哪种语言),但是如果我旋转设备,那么语言就会改变为正确的语言(选择的语言)。在应用程序第二次运行时,同样的问题也会发生; 应用程序以英语启动,但旋转后语言会更改为正确的语言。
有什么建议吗?谢谢您提前的帮助。
这里是来自MainActivity的代码,我正在更改语言:
问题是,在第一次运行时,用户选择语言后,应用程序仍然是英文的(无论用户选择了哪种语言),但是如果我旋转设备,那么语言就会改变为正确的语言(选择的语言)。在应用程序第二次运行时,同样的问题也会发生; 应用程序以英语启动,但旋转后语言会更改为正确的语言。
有什么建议吗?谢谢您提前的帮助。
这里是来自MainActivity的代码,我正在更改语言:
private void initApp() {
if (Settings.getLanguage().equals("")){
String[] items = { getResources().getString(R.string.lang_eng), getResources().getString(R.string.lang_geo)};
showDialogSingleChoise(items, getResources().getString(R.string.select_language_title), 0, false, false, this.languageSelectedListener, this.languageConfirmedListener, null);
} else {
System.out.println("initApp: " + Settings.getLanguage());
Settings.setLanguage(MainActivity.this.getResources(), Settings.getLanguage());
appVersionCheck();
}
}
private OnClickListener languageConfirmedListener = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Settings.setLanguage(MainActivity.this.getResources(), MainActivity.this.language);
appVersionCheck();
}
};
这里是从设置中的代码片段:
public static void setLanguage(Resources res, String langString){
System.out.println("lang in pref: " + langString);
setStringProperty(PREFS_LANG ,langString);
MainApp.getInstance().setLocale(res);
}
这是我的Application类:
public class MainApp extends Application {
private static volatile MainApp instance;
public static MainApp getInstance() {
return MainApp.instance;
}
@Override
public void onCreate() {
MainApp.instance = this;
super.onCreate();
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
setLocale(this.getResources());
}
public void setLocale(Resources res) {
System.out.println("initApp: " + Settings.getLanguage() == "" ? Settings.LANG_EN : Settings.getLanguage());
Configuration conf = res.getConfiguration();
conf.locale = new Locale(Settings.getLanguage() == "" ? Settings.LANG_EN : Settings.getLanguage());
res.updateConfiguration(conf, res.getDisplayMetrics());
}
}
最后,这是AndroidManifest(我是否需要添加android:configChanges="locale"?):
<application
android:name="...MainApp"
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="....MainActivity"
android:configChanges="locale"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>