运行时的伪资源(使用配置限定符)

时间:2013-05-22 09:05:47

标签: android eclipse

我正在创建一个应用程序,该应用程序在运行时使用来自本地设备文件夹(从服务器返回)的图像,而不是应用程序自己的资源文件夹。

我想利用Android的运行时能力将相应的资源文件用于不同的显示类型/方向,类似于其当前不同资源文件夹(ldpi,hdpi,sw600sp等)的运行时使用情况,但在我的情况下,不是实际上在应用程序构建期间存在完整的资源文件夹内容。

哪种方法可以实现这一目标?

i)拉回服务器映像文件并创建一个Android识别的子目录结构,其方式与目前识别其res目录结构的方式类似 - 如果您愿意,则为运行时伪资源文件夹。

ii)覆盖事件以捕获现有活动的方向更改并在启动时手动确定显示类型,以便将所有应用程序的活动指向适当的(在运行时本地存储)图像文件。

我不完全确定如何实现上述任何一项,因此我们将不胜感激任何偏好和一般方法。

2 个答案:

答案 0 :(得分:2)

您也可以使用Android的资源识别机制。您可以在服务器上创建不同的图像,并可以在strings.xml中存储链接 因此,您将在不同的res / values-xx文件夹中使用不同的strings.xml(其中xx代表配置限定符)。请查看Providing Resources以了解有关配置限定符的更多信息。

所以在values-ldpi中,你的strings.xml可以有一个值:

<string name="icon">http://my-server/images/icon-ldpi.jpg</string>

而values-hdpi中的strings.xml的值为:

<string name="icon">http://my-server/images/icon-hdpi.jpg</string>

等等。

修改: 如果url包含运行时参数,您可以在strings.xml中将其指定为:

<string name="icon">http://my-server/%1$s/images/icon-ldpi.jpg</string>

您在Java代码中使用相同的内容如下:

String iconURL = getResources().getString(R.string.icon, siteId);

如果siteID为001,则根据设备类型,imageURL将为“http://my-server/001/images/icon-ldpi.jpg”或“http://my-server/001/images/icon-mdpi.jpg”或“http://my-server/001/images/icon-hdpi.jpg”或...事实是,您不必在代码中执行任何操作来确定显示属性,以便工作。

答案 1 :(得分:0)

事实证明这比我想象的要容易。我可以返回存储在assorted values-xxx文件夹中的'identifier'字符串,以便构建一组适当的可能文件名。

e.g。 在values \ string.xml中:

<resources>
    <string name="app_name">Resource Tester</string>
    <string name="action_settings">Settings</string>
    <string name="myindicator_lang">en</string>
    <string name="myindicator_dpi">normal</string>
    <string name="myindicator_orient">port</string>
</resources>

在values-de \ string.xml中:

<resources>   <string name="myindicator_lang">de</string>   </resources>

在values-land \ string.xml中:

<resources>   <string name="myindicator_orient">land</string>   </resources>

在values-hdpi \ string.xml中:

<resources>   <string name="myindicator_dpi">hdpi</string>   </resources>

在运行时返回此字符串信息,我可以根据设备配置动态构建所需的文件名,允许我存储具有适当名称的备用服务器/本地存储资源,并让我的应用程序使用最合适的图像文件它存在。

即。在服务器/本地存储中有:

mybanner-en.jpg
mybanner-de.jpg
mybanner-de-land.jpg

我现在可以搜索与当时设备配置最匹配的现有存储文件。

非常感谢Rajesh指出我正确的方向。