Nuke Olaf - Log Store
[Android] 안드로이드 - DataBinding 에서 String Format 적용 본문
안드로이드에서 String.xml 을 동적으로 사용하고 싶은 상황이 있을 수 있다.
예를 들어, 로그인한 유저의 이름을 불러주면서 새로 온 메시지의 개수를 알려줘야하는 String Resource 가 있다고 생각해보자. 그 문장은 아래와 같이 string formatter 를 사용한 format string 으로 표현될 수 있다.
여기서 사용되는 string format 은 Java5+ 의 String.format() (문자열 형식 지정)과 같다. 서식 문자열을 사용한 형식 문자열을 만들 수 있다. (참고)
서식 문자열의 앞에 "%"를 붙여 문자열에 기술해 두면 그 그위치에 변수의 값을 형식화하여 넣을 수 있다.
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
%1$s 는 첫 번째 파라미터에 String 값이 들어오고, %2$d 는 두 번째 파라미터에 십진수 숫자가 들어온다는 뜻의 인자이다. 복수의 파라미터가 사용될때는 앞에 [argument index] 가 붙고, 파라미터가 한개인 경우에는 붙이지 않아도 무방하다고 하는데,직접 해보니까 에러가 뜬다. argument index 를 붙여야 에러가 안뜨는 듯
위의 String Resource 를 Kotlin 에서 가져와 사용할때는 다음과 같이 작성한다.
var text = getString(R.string.welcome_messages, username, mailCount)
그런데, 놀랍게도 dataBinding 을 사용하면 xml 에서도 위의 String Format 을 사용하여 text 를 표현할 수가 있다.
android:text= "@{@string/welcome_messages(vm.username, vm.mailcount)}"
이렇게 표현하니 훨씬 간단해졌다.
하지만, 위의 방식을 사용하면, data 가 아직 준비되지 않은 상태인경우
" Hello, null! You have null new messages. "
이런식으로 문자열이 표현된다는 문제점이 있다.
이에 대한 해결책으로는 dataBinding 표현식에서 검사해주는 방법이 있다.
android:text= "@{vm == null ? @string/loading :
@string/welcome_messages(vm.username, vm.mailcount)}"
출처 : https://developer.android.com/guide/topics/resources/string-resource#formatting-strings
'Android' 카테고리의 다른 글
[Android] 안드로이드 - Koin (코틀린 개발자를 위한 경량화된 DI 프레임워크) 사용법 (0) | 2020.06.06 |
---|---|
[Android] 안드로이드 - DI (Dependency Injection) (0) | 2020.06.01 |
[Android] 안드로이드 - AAC View Model 과 Live data (0) | 2020.05.26 |
[Android] 안드로이드 - Api 를 사용한 MultiAutoCompleteTextView (태그자동완성 기능) (0) | 2020.05.11 |
[Android] 안드로이드 - 액티비티 중복 실행 방지 (0) | 2020.05.08 |