2017-06-01 15 views
0

我正在尋找使用Android資源的例子,我想從strings.xml文件中獲取所有包含元素的元素單詞「菜單」,所有這些都是爲了管理多個部分的翻譯。Android - 如何從字符串資源中獲取包含兩個或更多相似單詞的所有元素

我的XML是這個

<resources> 
<string name="app_name">MyApp</string> 
<string name="usage_analytics">Show Analytics</string> 
<string name="option_resume">Resume</string> 
<string name="option_analisys">Analysis</string> 
<string name="option_categories">Categories</string> 
<string name="option_settings">Settings</string> 

,併爲了這個,我想所有包含在其名稱中的「選項」字的元素。在我的例子我想option_resume,option_analysis,option_categories和option_settings

在這種情況下,我已經找到勸手動使它像的GetString(R.string.option_resume)的GetString(R.string.option_analisys)的GetString (R.string.option_categories),GetString(R.string.option_settings)等

但是,對於這種情況下,我必須使它動態獲取所有具有確定字和沒有字符串數組資源的項目。

對此有何想法?

回答

-1
private String getData(String suffix){ 

     String data = "option" + suffix; 

     String getStringData = this.getResources().getString(
       this.getResources().getIdentifier(data, Const.STRING, 
         this.getPackageName())); 

     return getStringData ; 
    } 

調用這個函數,你會得到一個特定的字符串。如果你需要一個字符串列表,那麼你可以在循環中使用。

+0

請詳細解釋**,**如何回答這個問題。 OP不知道「lookingFor」的值爲**,這是OP正在嘗試查找**的值。 – CommonsWare

+0

這不會返回一個列表或數組。他想要在其中找到帶有「選項」的所有字符串。 – Prexx

+0

更新了Ans。請立即檢查。 –

0

但這種情況下,我必須使它dinamically獲得所有這些有determinated字

你並不需要動態地做到這一點的項目。資源在編譯時已知。一組新的資源將不會在您的應用程序中以一個新的前綴神奇地出現。

沒有一個String數組資源

一個string-array資源會做它的明智的方式。我不太確定你爲什麼不想使用它。鑑於現有的從上面strings.xml,有一個arrays.xml

<string-array name="options"> 
    <string>@string/option_resume</string> 
    <string>@string/option_analisys</string> 
    <string>@string/option_categories</string> 
    <string>@string/option_settings</string> 
</string-array> 

然後,請求在運行時options字符串數組會給你想要的字符串。

如果您的問題是手動維護arrays.xml文件,請編寫一段代碼將其作爲構建的一部分生成(例如,自定義Gradle任務,自定義Gradle插件)。

這樣做是使用Java反射來遍歷對於應用的R類中的所有R.string領域,找到他們的名字,看看哪些比賽,然後使用getString()得到相應的字符串值的緩慢和草率的方式。

+0

這就是答案,非常感謝。就像你說的,在這種情況下,我們可以引用特定的字符串,我們可以在數組資源上使用它。這是我的錯誤,因爲我沒有參考。 而且我錯誤的想法是把它從所有資源中循環,讓它變得更慢,在那種情況下 –

1

我發現的@CommonsWare

String[] optionsArray = ctx.getResources().getStringArray(R.array.option_strings); 

,並幫助解決使用,我做了我一直在尋找的動作。

相關問題