【发布时间】:2012-09-01 19:05:21
【问题描述】:
我想让用户使用微调器(或任何方式)更改我的应用程序的语言。 我尝试了很多方法,但他们改变了这个活动的语言,而不是所有活动,我想保存它,这样当用户重新启动应用程序时,他会找到最后选择的语言。
【问题讨论】:
我想让用户使用微调器(或任何方式)更改我的应用程序的语言。 我尝试了很多方法,但他们改变了这个活动的语言,而不是所有活动,我想保存它,这样当用户重新启动应用程序时,他会找到最后选择的语言。
【问题讨论】:
您可以在微调器中使用此代码或任何您想要的方式
String languageToLoad = "en"; // your language
Locale locale = new Locale(languageToLoad);
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",languageToLoad );
editor.commit();
并在 onCreate() 中的每个活动中使用相同的代码从 SharedPreferences 加载 languageToLoad
【讨论】:
这是一个老问题,但无论如何我都会回答:-) 您可以扩展 Application 类以在每个 Activity 上应用 Abol3z 的解决方案。创建类:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String lang = preferences.getString("lang", "en");
Locale locale = new Locale(lang);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
}
}
并将 MyApplication 设置为 manifest 中的应用程序类:
<application
android:name=".MyApplication"
...
/>
您可以设置 lang 值(在您的微调器中):
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(getContext());
preferences.edit().putString("lang", "en").commit();
【讨论】:
使用 SharedPreferences 来跟踪用户选择的语言,然后在 onCreate() 和 onResume() 方法中设置活动以使用该语言。这样,它将在应用重启等过程中持续存在。
【讨论】:
btnChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(mContext);
//preferences.edit().putString("lang", "bn").commit();
String lang = preferences.getString("lang", "en");
//Log.e("lang", "lang in Main Activity:"+lang);
if (lang.equalsIgnoreCase("en")){
setLocale("bn");
preferences.edit().putString("lang", "bn").commit();
btnChange.setText("Eng");
}else if(lang.equalsIgnoreCase("bn")){
setLocale("en");
preferences.edit().putString("lang", "en").commit();
btnChange.setText("বাংলা");
}
}
});
public void setLocale(String lang) {
myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
finish();
}
我们使用两种语言进行测试。将所有字符串保存在名为 values 和 values-bn 的不同文件夹中。
【讨论】:
conf.locale = myLocale 和 res.updateConfiguration(conf, dm); 现已弃用