我正研究一个需要双语(英语/西班牙语)的Android应用软件。我允许用户从首选语言中选择所需的语言,并根据所选语言对应用程序的主要活动(TabActicity子类)进行以下局部修改:
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);
}
主活动包含四个标签, 每个标签都有自己的活动( 有时活动组 ) 。 我希望发生的情况是, 当语言变化时, < em> all em > 开放活动只是重新开始, 导致字符串以合适的语言重新装入。 也可以接受( 但不太可取) : 全部销毁所有开放活动, 要求用户再次手动启动应用程序, 因此所有字符串都将用合适的语言重新装入 。
我尝试从导致该活动停止的主要活动中调用finish ()
。 但是,当我重新启动应用程序时,由主要活动“主持”的“儿童活动”(每个标签各一张)仍以先前语言出现。 我猜这是因为儿童活动对我而言不是反复的“完成 ” 。
我还尝试了包含/ 排除 Anderroid Manifest. xml 中关于主要活动和其他活动的“ 本地” 属性, 但我从未看到活动在本地变化时重新开始。 但是, “ 重新启动” 本身会如何表现呢? 它会称之为 < code> onCreate () code > 或简单的 < code> onResume () code > 或其它东西吗? 如果这个方法会自动重启活动, 在本地变化时呼叫 < code > onCreate () < / code >, 那么它会听起来像是关于如何实现这一点的具体指导, 会是我案子中的最佳途径 。
解决方案需要运行在Android API 7 级上,因此无法创建新的 < code> Intent ,其旗帜为 < code> FLAG_ACTIVITY_CLEAR_TASK ,显然无法使用。