我正在尝试使用许多activities
构建一个非常简单的应用程序。
在此应用中,我有一个WelcomeActivity
,用户可以选择带有两个按钮的language
,一个用于English
,另一个用于Arabic
,然后用户选择他的语言,语言将在所有活动中更改,此WelcomeActivity
将仅首次运行,并且永远不会再显示。
任何帮助?
答案 0 :(得分:0)
你可以这样做。
Locale locale = new Locale("ar”,"XX");
private void updateLocale(locale) {
final Configuration configuration = getResources().getConfiguration();
Locale.setDefault(baseLocal);
configuration.locale = baseLocal;
getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
}
如何在下次启动时恢复所选语言。 [最好将它存储在共享偏好中。]我希望你可能知道如何存储。您只需要优先存储“ar”或“en”文本。在下次启动时,您必须回读并形成Locale并传递updateLocale()方法。
您可以使用OnConfigurationChanged方法
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
Configuration configuration = getResources().getConfiguration();
Locale.setDefault(mCurrentLocale);
configuration.locale = mCurrentLocale;..locale from preference or latest selected.
getResources().updateConfiguration(configuration, getResources().getDisplayMetrics());
}
可以从之前存储的共享首选项中读取mCurrentLocale。
在这种情况下如何以共享首选项存储语言
final SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(
this);
sharedPreferences().putString(KEY_STORE_CURRENT_LOCALE, language_code).commit();
在这种情况下如何从共享偏好中获取语言
final String current = sharedPreferences.getString(KEY_STORE_CURRENT_LOCALE,
language_code_english);
我希望这会有所帮助!
答案 1 :(得分:0)
您可以将语言值放在共享首选项中。在我的情况下,我有en和np作为英语和尼泊尔语。首先我把共享偏好中的值作为语言存储,然后我有一个lang按钮。在我的情况下,我已经重新启动了我的应用程序,因为我的用户需要从另一个api再次加载数据。然后我将共享首选项字符串附加到API。
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
String language = preferences.getString("language","en");
lang.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(language.equals("en")){
Util.setLanguage("np");
Intent restartIntent = new Intent(NavDrawerActivity.this,SplashActivity.class);
restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(restartIntent);
(NavDrawerActivity.this).finish();
}else {
Util.setLanguage("en");
Intent restartIntent = new Intent(NavDrawerActivity.this,SplashActivity.class);
restartIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(restartIntent);
(NavDrawerActivity.this).finish();
}
}
});