我在MainActivity.java
中选择了我的应用的语言,有时它无法正常使用。
这是我在onCreate
方法上的代码:
if(!SaveSharedPreference.getUserId(MainActivity.this).equals("")) {
if (SaveSharedPreference.getWhoLoggedIn(MainActivity.this).equals("Main_User")) {
FetchUserLanguage fetchUserLanguage = new FetchUserLanguage();
fetchUserLanguage.execute();
}
} else {
sDefSystemDefaultLanguage = Resources.getSystem().getConfiguration().locale;
Configuration configuration = new Configuration();
configuration.locale = sDefSystemDefaultLanguage;
getBaseContext().getResources().updateConfiguration(configuration, getBaseContext().getResources().getDisplayMetrics());
}
在FetchUserLanguage
我从我的数据库中获取每个用户的语言(它正确地返回值)。
我设置Locale
的方法是下一个:
@Override
protected void onPostExecute(String result) {
switch (result) {
case "English":
locale = new Locale("en");
configuration = new Configuration();
configuration.locale = locale;
getBaseContext().getResources().updateConfiguration(configuration,
getBaseContext().getResources().getDisplayMetrics());
break;
case "Deutsch":
locale = new Locale("de");
configuration = new Configuration();
configuration.locale = locale;
getBaseContext().getResources().updateConfiguration(configuration,
getBaseContext().getResources().getDisplayMetrics());
break;
default:
locale = Resources.getSystem().getConfiguration().locale;
configuration = new Configuration();
configuration.locale = locale;
getBaseContext().getResources().updateConfiguration(configuration,
getBaseContext().getResources().getDisplayMetrics());
break;
}
}
当我从Android Studio运行应用程序时,它运行完美,所有应用程序都以所选语言设置,但是,如果我关闭并再次打开它,第一个屏幕将以英语显示,(另一个是在德国)。设备的语言是英语,因此Android项目的默认语言也是如此。
也许我错过了什么。
非常感谢。
答案 0 :(得分:1)
最后我找到了解决方案。
问题是我在异步线程中进行翻译过程,因此应用程序仍在运行,并且在屏幕更改之前,某些布局未更改为新语言。
解决方案是在onPostExecute()
方法的末尾创建Intent:
@Override
protected void onPostExecute(String result) {
switch (result) {
case "English":
locale = new Locale("en");
Locale.setDefault(locale);
configuration = new Configuration();
configuration.locale = locale;
SaveSharedPreference.setUserLanguage(MainActivity.this, locale.getLanguage());
getBaseContext().getResources().updateConfiguration(configuration,
getBaseContext().getResources().getDisplayMetrics());
break;
case "Deutsch":
locale = new Locale("de");
Locale.setDefault(locale);
configuration = new Configuration();
configuration.locale = locale;
SaveSharedPreference.setUserLanguage(MainActivity.this, locale.getLanguage());
getBaseContext().getResources().updateConfiguration(configuration,
getBaseContext().getResources().getDisplayMetrics());
break;
default:
locale = Resources.getSystem().getConfiguration().locale;
Locale.setDefault(locale);
SaveSharedPreference.setUserLanguage(MainActivity.this, locale.getLanguage());
configuration = new Configuration();
configuration.locale = locale;
getBaseContext().getResources().updateConfiguration(configuration,
getBaseContext().getResources().getDisplayMetrics());
break;
}
Intent intent = new Intent(MainActivity.this, MainMenuActivity.class);
if(SaveSharedPreference.getUserType(MainActivity.this).equals("Full")) {
intent.putExtra("Type", "Full");
}
startActivity(intent);
finish();
}