好的,所以标准答案从未对我有用。我在这里使用的是 Titanium 2.1。{在此处插入对 Ti 开发人员传统的侮辱}
解决方案很简单——不要使用这里讨论的大肆吹嘘的“智能钛密度特定解决方案”:
http://docs.appcelerator.com/titanium/2.1/index.html#!/guide/Using_density-specific_resources_on_Android
相反,使用这个简单、朴素的代码来解决您的问题!
var density = (Titanium.Platform.displayCaps.dpi <= 160) ? 'low' : (Titanium.Platform.displayCaps.dpi > 160 && Titanium.Platform.displayCaps.dpi < 240) ? 'medium' : 'high';
var preamble = (Ti.Platform.osname === 'iphone' || (Ti.Platform.osname === 'ipad') )? 'images':'android/images/'+density + '/';
好的,所以第一位设置密度 -注意我现在还不知道 Ti 的正确密度读数,我只是把它放好,直到我把它们算出来 - 如果应用程序是安卓,第二位使用它一。
然后,我曾经拥有的地方:
var aboutTab = Ti.UI.createTab({
icon: 'images/about.png',
title: 'about',
window: about
});
我现在有:
var aboutTab = Ti.UI.createTab({
icon: preamble + '/about.png',
title: 'about',
window: about
});
就是这样!
最后一句话:我注意到,根据使用的 Titanium 版本(2.1.3 与 2.1.0)或使用的 android sdk,这可能会表现得非常不同。我在 2.1.0 和 4.2 android 中获得了最好的结果,这包括使用“图像”前缀(你知道,指南是如何做到的)。
我注意到的一件事是我不能同时拥有高/中/低文件夹和 hdpi 文件夹,我需要一个或另一个。
我面临的另一个问题是有时代码不会加载 android/images/ 文件夹。完全防弹的方法是使用我描述的代码,但将特定于密度的文件夹直接放在图像文件夹下,并通过 images/high/ 等引用它们。图像中的内容总是被复制,并且显示的代码始终有效,无论 Ti 版本如何。
最后一点,请确保您的图像命名区分大小写,因为它可以在 windows 模拟器中工作,但不能在实际(基于 unix 的)设备中工作。