4

所以遵循这里的概念:

http://docs.appcelerator.com/titanium/2.1/index.html#!/guide/Using_density-specific_resources_on_Android

我创建了一个文件夹

Resources/android/images/

然后就是:

high/
medium/
low/

并且在每个文件中都有不同密度的文件(比如about.png)

问题是当我引用它们时:

var aboutTab = Ti.UI.createTab({
    icon: '/images/about.png',
    title: 'about',
    window: about
});

或者正如其他人所建议的那样(即,丢失“图像”上的前导斜线):

var aboutTab = Ti.UI.createTab({
    icon: 'images/about.png',
    title: 'about',
    window: about
});

然后加载应用程序,确保标签本身在那里......但图标不存在。请注意,如果我有一个普通的旧文件存在于:

Resources/images/about.png

然后图标会出现......但不会出现。有没有……我在这方面遗漏了什么?

4

2 回答 2

1

在此处输入图像描述请冷静地阅读并理解这是与我一起工作的“更多控制”段落。

var aboutTab = Ti.UI.createTab({
    icon: 'images/about.png',     // "/" remove this and try again
    title: 'about',
    window: about
});

请从您的设备或模拟器中删除您的旧应用程序。在此清洁然后构建之后,我认为这是正常工作。

于 2012-09-07T09:39:15.637 回答
1

好的,所以标准答案从未对我有用。我在这里使用的是 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 的)设备中工作。

于 2012-09-24T02:41:45.413 回答