如何更改语言后更新活动?
问题描述:
我在Google上搜索& stackoverflow,但我无法解决我的问题。我指的是http://www.androhub.com/android-building-multi-language-supported-app/我有三项活动(活动1,2,3)。活动1>活动2>活动3(米尔蒂朗变化)。在练习3中,我有两个单选按钮来改变(en,hi)。我改变语言之后;去第一次活动(活动1),没关系。但我想保留当前活动(刷新当前活动),选择单选按钮后(更改语言)。否则,当我回到onBackPressed()时,如何调用onCreate()。如何在改变语言后保持当前活动的最佳方式。如何更改语言后更新活动?
的onCreate
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
txt = (MMTextView) findViewById(R.id.txt);
radioGroup = (RadioGroup) findViewById(R.id.radioGroup);
pref = getSharedPreferences("MyPref", Activity.MODE_PRIVATE);
editor = pref.edit();
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, @IdRes int i) {
String lang = "en";
switch (i) {
case R.id.eng:
lang = "en";
Intent i1 = new Intent(Main3Activity.this, MainActivity.class);
i1.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i1);
finish();
break;
case R.id.hi:
lang = "hi";
Intent i2 = new Intent(Main3Activity.this, MainActivity.class);
i2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(i2);
finish();
break;
default:
break;
}
changeLocale(lang);
}
});
loadLocale();
}
changeLocale
private void changeLocale(String lang) {
if (lang.equalsIgnoreCase(""))
return;
Locale myLocale = new Locale(lang);
saveLocale(lang);
Locale.setDefault(myLocale);
Configuration config = new Configuration();
config.locale = myLocale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
}
saveLocale & loadLocale
private void saveLocale(String lang) {
editor.putString("save", lang);
editor.commit();
}
private void loadLocale() {
String lang = pref.getString("save", "");
changeLocale(lang);
}
答
您可以关闭和打开相同的活动,如:
startActivity(new Intent(ActivityName.this, ActivityName.class));
finish();
我希望这个作品。
答
/***You need to create separate String file for both arabic and
English***/
English
Values
String.xml
Hindi
Values-hi
String.xml
/**You can change the application language using the following code:**/
language = "en"; or language = "hi";
@Override
public void recreate()
{
if (android.os.Build.VERSION.SDK_INT >= 14)
{
super.recreate();
}
else
{
startActivity(getIntent());
finish();
}
}
private void updateLanguage(String language)
{
Locale locale = new Locale(language);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config, getBaseContext().getResources().getDisplayMetrics());
SharedPreferences languagepref = getSharedPreferences("language",MODE_PRIVATE);
SharedPreferences.Editor editor = languagepref.edit();
editor.putString("languageToLoad",language);
editor.apply();
recreate();
}
答
使用recreate()重新启动当前活动。
此链接可能会对您有所帮助:https://stackoverflow.com/questions/8049207/how-to-refresh-activity-after-changing-language-locale-inside-application?answertab=oldest#tab-top –
@ Shwe请查看此链接---> https://stackoverflow.com/questions/45088039/set-different-language-in-android-studio/45088145#45088145 – yash786