在我的应用程序中,我想创建一个设置,用户可以根据自己的选择更改语言。为此,我为每种语言创建了相应的值文件夹和字符串文件。我的代码片段如下:
public class MultiLanguage extends Activity implements OnClickListener {
private Button germany, english, french;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.language);
english = (Button) findViewById(R.id.english);
english.setOnClickListener(this);
germany = (Button) findViewById(R.id.germany);
germany.setOnClickListener(this);
french = (Button) findViewById(R.id.french);
french.setOnClickListener(this);
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.english:
setLocale("en");
break;
case R.id.germany:
setLocale("de");
break;
case R.id.french:
setLocale("fr");
break;
}
}
public void setLocale(String localStr) {
Locale localeLang = new Locale(localStr);
Locale.setDefault(localeLang);
Configuration config = new Configuration();
config.locale = localeLang;
getBaseContext().getResources().updateConfiguration(config,
getBaseContext().getResources().getDisplayMetrics());
finish();
Intent refreshActivity = new Intent(this, Home.class);
refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED);
startActivity(refreshActivity);
}
}
每当我从应用程序中退出并再次启动应用程序时,选择的语言就会变为英语。我没有找到这个问题的根源。
在清单文件中,我还提到了以下一行:
android:configChanges="locale"
任何人都可以纠正我在这里犯的错误。
答案 0 :(得分:4)
问题是您不能在程序启动之间保存语言。使用preferences保留它并在onCreate
中阅读。
答案 1 :(得分:1)
你真的试图重新发明轮子吗?
为什么不使用用户在手机上选择的默认语言环境?这是Android生态系统中的首选方式。
您唯一需要做的就是提供资源文件的多个版本(每个所需的区域设置一个)(例如values/strings.xml
)。如果在您的应用程序资源中找不到用户的区域设置,则默认为values/strings.xml
。否则它将使用values-[locale]/strings.xml
更多详情:http://developer.android.com/guide/topics/resources/localization.html
答案 2 :(得分:1)
问题在于您的流程完成了您的活动,然后有意图开始新的活动,所以这样做:
Intent refreshActivity = new Intent(this, Home.class);
refreshActivity.setAction(Intent.ACTION_CONFIGURATION_CHANGED);
startActivity(refreshActivity);
finish();