我正在创建一个应用程序,该应用程序在运行时使用来自本地设备文件夹(从服务器返回)的图像,而不是应用程序自己的资源文件夹。
我想利用Android的运行时能力将相应的资源文件用于不同的显示类型/方向,类似于其当前不同资源文件夹(ldpi,hdpi,sw600sp等)的运行时使用情况,但在我的情况下,不是实际上在应用程序构建期间存在完整的资源文件夹内容。
哪种方法可以实现这一目标?
i)拉回服务器映像文件并创建一个Android识别的子目录结构,其方式与目前识别其res目录结构的方式类似 - 如果您愿意,则为运行时伪资源文件夹。
ii)覆盖事件以捕获现有活动的方向更改并在启动时手动确定显示类型,以便将所有应用程序的活动指向适当的(在运行时本地存储)图像文件。
我不完全确定如何实现上述任何一项,因此我们将不胜感激任何偏好和一般方法。
答案 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指出我正确的方向。