我已经实现了自己的手动方法,可以在应用程序中切换应用程序的本地化,而无需修改设备的本地化设置。用户可以通过iOS设备上的一组右侧导航按钮点击标签栏,也可以使用Android设备上的原生菜单选择所需的语言。
此方法适用于iOS设备。 几乎 在Android设备上运行良好,因为在用户进行选择后,所有文本标签都会立即设置为相应的语言。但是,我的Android设备上的原生TabGroup选项卡标题不会更改。它们会立即在我的iOS设备上更改。
我尝试了很多不同的方法来解决这个问题。我尝试从TabGroup删除现有标签,但Android不支持此功能,至少在使用Titanium时不支持。我尝试关闭tabGroup然后重新打开它,但这只会导致我的应用程序锁定。我也尝试循环遍历所有标签并设置标题无效。我还试图在tabGroup的tabs数组上使用splice()命令,这只会引发一个TypeError抱怨没有找到object的默认值。
这变得非常令人沮丧。我查看了可用的自定义选项卡选项,包括名为Tabulous的Titanium Marketplace模块。我对这些替代方案并不感到兴奋,特别是因为它们的水平布局性能不佳或依赖于使用图像而不是混合图像和文本。
我知道的一件事是,在Android设备上,我的标签标题正在被更改,因为在我的事件监听器中,我在语言选择中设置标签标题,我可以遍历tabGroup集合中的标签并输出反映所选语言的标题。但是,Android出于某种原因不会重新绘制标签以显示新文本。
这是我的事件监听器的片段,我在其中设置标签标题:
Titanium.App.addEventListener('langChanged', function() {
homeTab.title = al.L('home_win_title');
servicesTab.title = al.L('services_win_title');
mediaTab.title = al.L('media_win_title');
contactTab.title = al.L('media_win_title');
// Android test:
if (Ti.Platform.name == 'android') {
for (var t in tabGroup.tabs) {
// The alert below returns the expected title based on the language selection!
alert(tabGroup.tabs[t].title);
}
}
});
正如我所说,在我的测试iOS设备上,标签标题会按预期更新。在Android设备上,它们不会更改(不会重新绘制),但我在上面循环中抛出的警报会显示正确的文本。
任何想法,任何人?
答案 0 :(得分:0)
我遇到了同样的问题,同时也尝试在应用中支持多种语言,this post on the Appcelerator Q&A site似乎确认无法更改Android上的标签标题。
但是我通过关闭选项卡组并打开一个新问题解决了这个问题 - 所以可以这样做,而且可能需要重构一些应用程序以防止你提到的锁定问题。 / p>