strings.xml 파일의 엘리먼트들은 값을 가지고 있습니다. 태그가 둘러싼 가운데 끼어있는 값이죠. 이를 읽어올때 R.string 참조를 쓰면 R.string 다음에 오는 문자열을 조사해서 strings.xml 파일에 들어있는 엘레먼트 값을 읽어옵니다. 아래와 같이 실험해볼 수 있습니다.
|
1 2 3 4 5 6 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello!</string> </resources> |
|
1 2 3 |
val string: String = getString(R.string.hello) |
만일 name 어트리뷰트가 hello1부터 hello10까지 있어서 규칙적으로 엘리먼트 속성의 하나가 일괄적으로 숫자가 증가하도록 된 경우 아래 코드처럼 배열로 저장해야 할 때가 있습니다.
|
1 2 3 4 5 6 7 8 9 10 11 |
private var greetings = arrayOfNulls<String>(10) private var qStrPrefix : String = "R.string.hello" private var i = 0 while (i < 10) { greetings[i] = aStrPrefix + i.toString() i++ } |
이렇게 해서 함수에 전달하면 작동하지 않습니다. greetings[i] 값은 문자열 값이지, R.string 참조가 지시하는 값이 아니기 때문입니다.
이 경우 배열 생성을 꼭 해야 한다면, R.array 참조를 써볼만합니다.
strings.xml 파일에
|
1 2 3 4 5 6 7 8 9 10 11 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="planets_array"> <item>Mercury</item> <item>Venus</item> <item>Earth</item> <item>Mars</item> </string-array> </resources> |
처럼 하나의 R.array 참조 이름 아래에 item을 기재하고
|
1 2 3 |
val array: Array = resources.getStringArray(R.array.planets_array) |
처럼 쓰는게 가능해집니다. 그러면 위에 예시된 코드처럼 배열을 일부러 루프 돌려 하지 않아도 되고, R.string 참조 문자열을 쓸 궁리를 안해도 해결됩니다.
https://developer.android.com/guide/topics/resources/string-resource?hl=ko