2013-01-17 68 views
4

在我的應用中,對於本地化我有一個values-ar阿拉伯字符串文件夾。問題在於阿拉伯語字母在沒有安裝阿拉伯語的手機中顯示爲未連接。我使用ArabicReshape class加入阿拉伯字母,但由於字符串太多,我無法一個接一個地手動繼續應用整形類。獲取strings.xml中的所有字符串

我想知道我是否可以從strings.xml文件中獲得全部字符串,並通過循環遍歷它們將該類應用於字符串。這可能嗎?

+0

我不認爲這是可能的不幸...... –

+0

@Orabîg抱歉讓你們失望,但是這是可能的,看到的答案;-) –

+0

好點:)沒有想到使用反射。格拉茨... –

回答

6

我不明白你爲什麼需要遍歷所有的字符串,而不是在你需要一個特定的字符串時調用類。

但是當你問...

我想這可能會幫助你;-)

Field[] fields = R.string.class.getFields(); 
    for(final Field field : fields) { 
     String name = field.getName(); //name of string 
     try{ 
      int id = field.getInt(R.string.class); //id of string 
     }catch (Exception ex) { 
      //do smth 
     } 
    } 
+0

我在問,因爲好奇。 'for'循環中'final'的用法是什麼? – Smit

+0

對不起,我不明白。當我需要一個特定的字符串時,如何調用該類? – input

+0

我不能嘗試,因爲我沒有時間,沒有阿拉伯語的知識,但ArabicReshape.reshape(String Str)應該做的竅門 –

1

什麼你就要做的就是設置你的LOCALEAR從而使資源管理器會讓你從values-ar/strings.xml中取出字符串,然後使用反射R.string.class.getFields()得到一個Field的列表。然後遍歷你的字符串,並進行重塑。

嘗試像下面的代碼片段:

Resources resources = getResources(); 
int resourceId = 0; 
String resourceString; 
Field[] stringFields = R.string.class.getFields(); 
for(Field stringField : stringFields) { 

    try { 
     resourceId = stringField.getInt(R.string.class); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
     continue; 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
     continue; 
    } 

    resourceString = resources.getString(resourceId); 
    if(resourceString != null && resourceString.length() > 0) { 
     // do your reshaping on the resoureString 
    } 
} 
相關問題