본문 바로가기

나의 플랫폼/안드로이드

[Android]][DataBinding] String Format 적용하기

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

요즈음 DataBinding을 이용하면서 참 편리하게 코딩을 하고 있습니다. (기능 조사가 시간이 좀 걸렸지만^^a)


xml 에 Data를 바인딩 하는 중 text에 String format은 어떻게 적용하지?? 

궁금증이 생겼었습니다. 답은 구글에서 이미 넣어놓았더군요.


String Literals

When using single quotes around the attribute value, it is easy to use double quotes in the expression:

android:text='@{map["firstName"]}'

It is also possible to use double quotes to surround the attribute value. When doing so, String literals should either use the " or back quote (`).

android:text="@{map[`firstName`}"
android
:text="@{map["firstName"]}"

Resources

It is possible to access resources as part of expressions using the normal syntax:

android:padding="@{large? @dimen/largePadding : @dimen/smallPadding}"

Format strings and plurals may be evaluated by providing parameters:

android:text="@{@string/nameFormat(firstName, lastName)}"
android
:text="@{@plurals/banana(bananaCount)}"

When a plural takes multiple parameters, all parameters should be passed:


 
Have an orange
 
Have %d oranges

android
:text="@{@plurals/orange(orangeCount, orangeCount)}"

https://developer.android.com/topic/libraries/data-binding/index.html


위와 같이 String 값을 제어 할 수 있는데요.


android:text="@{@string/nameFormat(firstName, lastName)}"

String format은 위 설명이 끝입니다.

nameFormat 이라는 String format 값을 strings.xml에 정의해 주세요.


<string formatted="false" name="nameFormat">이름은 %s 이고, 성은 %s 입니다.</string>

그런 다음 firstName과 lastName 값을 넣어 주면 끝입니다.

firstName과 lastName은 데이터로 불러온 값을 넣으면 됩니다.

아래를 참고 하세요.


<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
   
<data>
       
<variable name="handlers" type="com.example.Handlers"/>
       
<variable name="user" type="com.example.User"/>
   
</data>
   
<LinearLayout
       
android:orientation="vertical"
       
android:layout_width="match_parent"
       
android:layout_height="match_parent">
       
<TextView android:layout_width="wrap_content"
           
android:layout_height="wrap_content"
           
android:text="@{user.firstName}"
           
android:onClick="@{handlers::onClickFriend}"/>
   
</LinearLayout>
</layout>


## 중요한 부분은 데이터를 xml에서 계산 하거나 바꿀려고 하지 마세요.

    xml에서는 인식을 못하게 됩니다. (xml형식이 있으니깐요. 거의 반나절 삽질 했네요..ㅠㅠ)


참고하세요.