0
我已经知道如何更改我的应用程序的语言(更新配置)。我的代码还检查配置是否被系统改变,并在'onCreate'方法中“修复”。我甚至创建了一个ListPreference来让用户用我的应用程序支持的语言来决定语言(并保存决定)。更改语言时修复资源
比方说,我有3个活动(A,B和SettingsActivity)。活动A可以启动活动B和设置活动。活动B可以启动SettingsActivity。如果用户更改内部SettingsActivity的语言,我可以使用此代码没有任何问题更新其资源(在这种情况下字符串):
//if (Build.VERSION_CODES.HONEYCOMB <= Build.VERSION.SDK_INT) {
// Disabled because it blinks and looks bad
// recreate();
// } else {
startActivity(getIntent());
finish();
overridePendingTransition(0, 0);
// }
不过,我无法改变已经打开的活动,因为我没有从SettingsActivity引用它们。
我的问题:是否有任何干净的方式来更新资源或重新创建已经开放的活动?如果我没有找到一个更好的解决办法,我的做法将是上述之一:
- 开始活动使用
startActivityForResult
并返回代码触发我已经使用重新创建活动的代码。 - 检查
onResume
方法的内部是否当前的语言已更改并执行相同的操作。
[更改应用程序本身内的区域设置]的可能重复(http://stackoverflow.com/questions/2264874/changing-locale-within-the-app-itself)。为了重新创建'Activity',我使用了'onResume()'方法。 –
我已经阅读过这个问题,大部分答案和我的问题都不是重复的。 – gian1200
[这个答案](http://stackoverflow.com/a/4881721/2821954)是我在我的应用程序中使用的。基本上,对于每个可以访问Activity的设置的Activity,都可以在'onCreate()'中添加一个变量来存储当前的语言(比如'Locale'或'String'等等)。然后,覆盖'onResume()'来检查语言是否改变。如果是,请重新创建“活动”。 –