簡體   English   中英

動態確定Android資源

[英]Dynamically Determine Android Resources

我有許多不同的字符串資源文件,這些文件是通過我們的Android系統使用我們的構建系統構建的。 這些字符串文件可以隨時增量添加,我們的構建系統將從它們各自的目錄中拾取它們。 我想枚舉所有字符串文件,或者能夠在其中獲取單個字符串而不必知道其中的字符串資源的名稱或ID。 我也不希望添加這些文件的人不得不在我的程序包中編輯一個主字符串文件,該文件包括一個列出了不同文件的數組。 有什么辦法可以做到這一點?

例:

SoccerStrings.xml
   id="SoccerDetails" value="soccer"
CricketStrings.xml
   id="CricketDetails" value="cricket"

在不知道這些文件存在的情況下,我如何為列表視圖提供兩個項目:板球和足球,以及自動支持可能出現的任何其他文件。

我在想最好的方法是讓構建系統將資產文件夾下的各個文件拉出,然后使用getAssets()。list(“”)功能以及XMLResourceParser類來訪問字符串值。 這樣可以正常工作,並讓我遇到ID沖突(例如:id =“ name”)嗎? 有更容易的方法嗎?

我會看aapt 我知道您可以使用以下命令從.apk中獲取資源-

aapt d --values resources app.apk

可能可以在構建過程的早期使用aapt來獲取資源。 它具有以下看似不錯的選項,但是aapt文檔有點薄。

--output-text-symbols
   Generates a text file containing the resource symbols of the R class in the
   specified folder.

作為另一種選擇,您可以修改生成過程,並在生成gen/<package>/R.java file后直接從gen/<package>/R.java file解析該字符串類。 您可以將其存儲在可加載文件中,或生成自己的源文件以添加到構建中。

我不會告訴你該怎么做。 我正在回答這個問題,以提出建議。

您計划做的事情與資源文件配合得不好。 這些文件基本上是代碼。 您要做的是關於數據。 您應該將數據保存在資產目錄中。 這樣,這些文件將不會像資源文件一樣在您的構建中進行預編譯。 您可以根據需要處理這些文件。 那時將涉及大量編碼,以將所有內容轉換為業務邏輯,但這將是編寫良好的可維護代碼所要付出的代價。

按照您建議的方式使用資源文件類似於Java反射。 您只想使用它是因為您具有與此功能相關的功能,而不是因為它是最簡單的方法。

話雖如此,您可能正好處於必須按照聲明的方式處理資源文件的情況。 在這種情況下,請接受我的歉意。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM