完全停止或重新启动Android应用程序中的所有活动,以反映新的语言选择
我正在开发一款需要双语(英语/西班牙语)的Android应用程序。我允许用户从首选项中选择所需的语言,并基于所选语言在应用程序的主活动(TabActivity的子类)中执行以下区域设置更改:完全停止或重新启动Android应用程序中的所有活动,以反映新的语言选择,android,Android,我正在开发一款需要双语(英语/西班牙语)的Android应用程序。我允许用户从首选项中选择所需的语言,并基于所选语言在应用程序的主活动(TabActivity的子类)中执行以下区域设置更改: private void setApplicationLanguage(String languageCode) { // Set the locale to the specified language code. Resources res = getResources(); D
private void setApplicationLanguage(String languageCode)
{
// Set the locale to the specified language code.
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
android.content.res.Configuration conf = res.getConfiguration();
conf.locale = new Locale(languageCode.toLowerCase());
res.updateConfiguration(conf, dm);
}
主活动包含四个选项卡,每个选项卡都有自己的活动(有时是ActivityGroup)。我希望发生的是,当语言发生变化时,所有打开的活动都会简单地重新启动,这会导致用适当的语言重新加载它们的字符串。同样可以接受(但不太理想)的是完全销毁所有打开的活动,需要用户手动重新启动应用程序,因此所有字符串都将以适当的语言重新加载
我已尝试从主活动调用finish()
,导致该活动退出。但是,当我重新启动应用程序时,主活动“托管”的子活动(每个选项卡一个)仍然以先前的语言显示。我想这是因为我的子活动没有递归地“完成”
我还尝试在主活动和其他活动上包括/排除AndroidManifest.xml中的“locale”属性,但我从未看到活动在本地更改后重新启动。那么,“重启”又将如何体现呢?它会调用onCreate()
还是简单地调用onResume()
,甚至是其他什么?如果这种方法会自动重新启动活动,在区域设置更改时调用onCreate()
,那么在我的情况下,关于如何实现这一点的具体指导似乎是最好的方法
该解决方案需要在Android API 7级上运行,因此创建一个新的
Intent
,带有flag\u ACTIVITY\u CLEAR\u TASK
标志显然是不可用的选项。您可以使用BroadcastReceiver
作为用于选项卡内容的每个活动的内部类
在onResume
中注册接收器,然后在onPause
中取消注册
让主活动
在区域设置更改时发送“粘性”广播,并使用onResume
中的registerReceiver
的结果检索意图
,查看区域设置是否已更改。这也适用于任何“可见的”活动
,以允许它动态更新数据。我实现了一个LocalBroadcastManager
,以告知相关方语言环境的变化。问题是我无法更新所有我想更新的东西,例如。G标签页上的标签。在“主要”(选项卡)活动中,效果最好的是:
Intent intent = new Intent(mainActivity.getApplicationContext(), MainTabActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
mainActivity.startActivity(intent);
虽然我还没有得到我需要的工作,但很明显这是解决问题的最好方法。谢谢