strings.xml 파일의 엘리먼트들은 값을 가지고 있습니다. 태그가 둘러싼 가운데 끼어있는 값이죠. 이를 읽어올때 R.string 참조를 쓰면 R.string 다음에 오는 문자열을 조사해서 strings.xml 파일에 들어있는 엘레먼트 값을 읽어옵니다. 아래와 같이 실험해볼 수 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello!</string>
</resources>
val string: String = getString(R.string.hello)
만일 name 어트리뷰트가 hello1부터 hello10까지 있어서 규칙적으로 엘리먼트 속성의 하나가 일괄적으로 숫자가 증가하도록 된 경우 아래 코드처럼 배열로 저장해야 할 때가 있습니다.
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 파일에
<?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을 기재하고
val array: Array = resources.getStringArray(R.array.planets_array)
처럼 쓰는게 가능해집니다. 그러면 위에 예시된 코드처럼 배열을 일부러 루프 돌려 하지 않아도 되고, R.string 참조 문자열을 쓸 궁리를 안해도 해결됩니다.
https://developer.android.com/guide/topics/resources/string-resource?hl=ko