프로그래밍 방식이 아닌 선언적 방식을 사용하여 레이아웃의 UI 구성 요소를
앱의 데이터 소스에 바인딩할 수 있는 Android Jetpack
의 라이브러리
DataBinding
라이브러리와 함께 AAC
를 사용하여 UI 개발을 더욱 단순화할 수 있다.Android 4.0(API 레벨 14) 이상
을 실행하는 기기Android Gradle Plugin 1.5.0 이상
build.gradle(Project)
의 dependencies
에 정의되어 있음build.gradle(Module: app)
에서 빌드 옵션 활성화android {
...
buildFeatures {
dataBinding true
}
}
1) xml
파일의 루트 레이아웃을 <layout>
태그로 감싼다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<LinearLayout>
...
</LinearLayout>
</layout>
2) 레이아웃의 뷰에 연결할 변수가 있을 경우, <data>
태그와 <variable>
태그를 이용해 변수를 선언한다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable
name="user"
type="com.example.User" />
</data>
<LinearLayout>
...
</LinearLayout>
</layout>
3) @{}
구문을 사용하여 레이아웃 컴포넌트에 변수를 할당한다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<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}"/>
</LinearLayout>
</layout>
레이아웃 xml
파일에 DataBinding
을 적용하면 각 레이아웃 파일에 대해 자동으로 바인딩 클래스가 생성된다.
생성되는 바인딩 클래스의 이름은 Pascal 표기법으로 변환된 xml
파일명 + Binding
이다.
ㄴ activity_main.xml -> ActivityMainBinding
레이아웃 컴포넌트에 변수를 할당하지 않고 findViewById()
의 호출을 대체하는 용도로만 사용할 경우엔 DataBinding
대신 ViewBinding
을 사용하는 것이 권장된다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 방법 1 - LayoutInflater 이용
val binding: ActivityMainBinding = DataBindingUtil.setContentView(
this, R.layout.activity_main)
// 방법 2 - ViewGroup 이용
val binding: MyLayoutBinding = MyLayoutBinding.inflate(
getLayoutInflater(), viewGroup, false)
binding.user = User("Test", "User")
}