2013-05-22 28 views
0

我正在創建一個應用程序,該應用程序在運行時利用本地設備文件夾中的圖像(從服務器返回),而不是來自應用程序自己的資源文件夾。在運行時僞資源(使用配置限定符)

我想利用Android的運行時功能,爲不同的顯示類型/方向使用相應的資源文件,類似於當前運行時不同資源文件夾(ldpi,hdpi,sw600sp等)的使用情況,但在我的情況下,實際上並不是在應用程序構建期間存在完整的資源文件夾內容

哪種方法可以達到這個目的?

我)拉回的服務器映像文件,並創建由Android以類似的方式認可的一個子目錄結構,因爲它目前承認其res目錄結構 - 如果你喜歡即運行僞資源文件夾。

ⅱ)重寫事件捉對現有的活動方向的變化和在啓動時手動確定的顯示類型,以點的所有應用程序的活動,以適當的(本地存儲在運行時)的圖像文件。

我不完全確定如何實現上述任何一個,因此任何跡象的優惠和一般方法將不勝感激。

回答

2

您也可以使用Android的資源識別機制。您可以在服務器上創建不同的映像,並且可以在strings.xml中存儲鏈接。 因此,您將在不同的res/values-xx文件夾(其中xx代表配置限定符)中包含不同的strings.xml。看看Providing Resources瞭解更多關於配置限定符。

所以在價值觀LDPI,您的strings.xml可以有一個值:

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

而在價值觀,華電國際的strings.xml中會有值:

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

和等等。

編輯: 在案件的網址包含運行參數,你可以指定的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」或...而事實是,您不必在代碼中執行任何操作來確定顯示屬性。

+0

我不能這樣做,因爲服務器目錄對於不同的用戶是不同的,例如, http:// my-server//images等。其中,siteid是在運行時確定的。不幸的是,這仍然不能回答我的問題:指出僅在運行時可用的資源的最佳方式,以及如何根據設備端運行時確定的配置限定符將應用程序指向這些資源。 – CoastalB

+0

您至少可以使用這個想法 - 而不是完整的URL,只使用圖像文件的名稱。另外,請注意[String Resources](http://developer.android.com/guide/topics/resources/string-resource.html)支持參數。所以完全可以在運行時創建http:// my-server /%s/images,其中%s被siteid替換。我想你還沒有完全明白答案。我會嘗試添加更多解釋。 – Rajesh

+0

添加說明。 – Rajesh

0

這已經證明比我想象的更容易。我可以返回存儲在各種值-xxx文件夾中的'標識符'字符串,以便構建一組適當的文件名。

例如 In 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> 

In values-de \ string。XML:

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

在價值觀土地\ string.xml:

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

在價值觀,華電國際\ string.xml:

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

有了這個字符串info在運行時返回,我可以根據設備配置動態地生成所需的文件名,允許我存儲備用服務器/具有適當名稱的本地存儲資源,並讓我的應用程序使用最適合的圖像文件(如果存在)。

即服務器/本地存儲有:

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

我現在可以搜索現有存儲的文件,其最好在當時的設備的配置相匹配。

非常感謝Rajesh,指引我朝着正確的方向前進。