2012-01-19 1 views
1

좋아,이 질문은 약간 이상해, 나에게 묻기에는 나에게 잘못을 말하지 만, 선택의 여지가 없기 때문에 너희들이 생각하는 것을 보아라. 나는 아직도 자바와 안드로이드에서 초보자이다.안드로이드가 XML 문자열 배열을 사용하지 않고 XML 문자열 리소스에서 String Array를 동적으로 만듭니다.

사례는 다음과 같습니다. 우리는 현지화를 위해 strings.xml 빌드를 자동화하려고합니다. 파서가 csv 파일을 xml로 변환하기 위해 만들어졌습니다. 일반 문자열의 경우 실제 문제가 아니므로 정상적으로 작동합니다. 그러나 파서는 문자열 배열을 고려하지 않고 누군가가 수정하게 될 가능성이 거의 없습니다.

문자열로 작업하고 이름 속성을 기반으로 프로그래밍 방식으로 문자열 배열을 만드는 "쉬운"방법이 있습니까?

그렇지 않으면 배열을 하드 코딩해야하며 언어 파일의 작성자 (클라이언트)가 동적 목록이어야하는 항목에 항목을 추가 할 수 없습니다.

strings.xml을 수작업으로 수정할 수는 있지만, 우리 경영진이 그런 자동화를 원하기 때문에 내가 가지고있는 선택 사항이 많지 않습니다.

아마도 나는 물건을 하드 코딩하고 목록을 동적으로 채울 수 없다고 말하지만 여전히 (내 개인 교육용으로도) 나는 너희들이 생각하는 것을 알고 싶다.

의견이나 솔루션에 감사드립니다. :)

건배!

+0

앱이 실행 중일 때 또는 프로젝트를 빌드하기 전에 strings.xml이 생성됩니까? 이것을 분명히하십시오. –

+0

안녕하세요, 죄송합니다. strings.xml은 프로젝트를 빌드하기 전에 생성되었지만 다른 애플리케이션에서 구문 분석해야합니다. 따라서 이론적으로 XML을 수동으로 수정할 수는 있지만 작동하는 방식이 아닙니다. 고객이 이미 문자열 파일을 만든 동안 제품의 새로운 반복이 출시 될 때마다 고객에게 요금을 부과해야하기 때문입니다. – StingRay5

+0

내 대답을 확인하십시오. –

답변

3

그래서 아래로 strings.xml의을 얻을 것이다

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="string1">1st string</string> 
    <string name="string2">2nd string</string> 
       ........ 
    <string name="stringN">Nth string</string> 
</resources> 

strings.xml에 대한 간단한 수정을 제안합니다.이 수정은 맨 위에 count라는 이름의 문자열을 추가합니다. 총 문자열 수와 같은 값을 가진 모든 문자열 중에서 이름 접두사가 개수보다 작은 다른 문자열을 추가하면 다음과 같이 표시됩니다.

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="count">4</string> 
    <string name="prefix">string</string> 
    <string name="string1">1st string</string> 
    <string name="string2">2nd string</string> 
    <string name="string3">3rd string</string> 
    <string name="string4">4th string</string> 
</resources> 

은 그래서 지금, 당신의 자바 파일에 당신은 내가 당신을 도울 수 있습니다 희망

int count = Integer.parseInt(getString(R.string.count)); 
     String prefix = getString(R.string.prefix); 
     String[] strings = new String[count]; 
     for (int i = 0; i < count; i++) { 
      strings[i] = getString(getResources().getIdentifier(prefix+(i+1), "string", getPackageName())); 
     } 

아래처럼 액세스 할 수 있습니다.

+0

Jens가 제출 한 솔루션과 거의 같지만 귀하의 의견은 좀 더 포괄적입니다. 감사! 내가 생각하기에이 앱의 첫 번째 버전에는이 내용이 포함되지 않지만 실제 해결책인데 향후 버전 업데이트에서보고 싶습니다. :) 감사! – StingRay5

3

문자열 배열에서 (&) 실제로 사용할 수 있습니다. 정말로을 사용해야합니다. 이되는 가정 당신의 스웨덴어 res/values/strings.xml 생성 :

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string name="string1">Hej, detta är på svenska</string> 
    <string name="string2">Denna strängen också</string> 
</resources> 

당신은, 예를 들어,에 res/values/arrays.xml 당신의 string-array를 넣을 수 있습니다 :

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <string-array name="somearrayname"> 
     <item>@string/string1</item> 
     <item>@string/string1</item> 
    </string-array> 
</resources> 
+0

안녕 Jens, 감사합니다, 이것은 내가 직접 해보았을 것이고, imho가해야 할 유일한 방법이며, 나는 또한 참조하려고했던 것이었고, 파서가 나에게 문자열 배열을 줄 것이다. 그러나 그렇지 않다. 그래서 나는 기본적으로 배열을 수동으로 만드는 것보다 다른 해결책을 찾고있다. – StingRay5

+0

글쎄, 아이디어는 * different * XML 문서에 배열을 넣는 것입니다 - strings.xml에 대한 참조를 사용하면서 - 자동으로 생성합니다. 어떤 이유로 각 변환에 대해 문자열 배열 변수를 만들어야하는 경우가 아니라면이 방법이 유용할까요? – Jens