我正在开发一个需要双语(英语/西班牙语)的 Android 应用程序。我允许用户从首选项中选择所需的语言,并根据所选语言在应用程序的主要活动(TabActivity 的子类)中执行以下区域设置更改:
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);
}
主要活动包含四个选项卡,每个选项卡都有自己的活动(有时是活动组)。我希望发生的是当语言发生变化时,所有打开的活动都会简单地重新启动,这会导致它们的字符串以适当的语言重新加载。同样可以接受(但不太理想)的是完全破坏所有打开的活动,要求用户再次手动启动应用程序,因此所有字符串都将以适当的语言重新加载。
我尝试finish()
从导致该活动退出的主要活动中调用。但是,当我重新启动应用程序时,由主要活动(每个选项卡一个)“托管”的子活动仍以先前的语言显示。我认为这是因为子活动对我来说没有递归地“完成”。
我还尝试在主要活动以及其他活动上包含/排除 AndroidManifest.xml 中的“语言环境”属性,但我从未看到在本地更改后重新启动活动。话又说回来,“重启”将如何表现出来?它会调用onCreate()
还是简单地调用onResume()
,甚至是其他东西?如果这种方法会自动重新启动活动,并在语言环境更改时调用onCreate()
,那么在我看来,关于如何实现这一点的具体指导听起来将是最佳途径。
该解决方案需要在 Android API 级别 7 上运行,因此Intent
使用该标志创建一个新FLAG_ACTIVITY_CLEAR_TASK
选项显然是不可用的选项。