안드로이드 개발자의 창고
[27일차 Android] View Binding 본문
출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT
📖 View Binding
- layout 폴더에 있는 xml 파일을 관리하는 클래스를 자동 생성하여 이를 통해 View를 관리할 수 있는 개념
- layout 폴더에 있는 xml 파일 당 하나의 클래스가 생성되며 이 클래스에는 xml 파일에 배치한 View들을 관리할 수 있는 기능이 구현되어 있다.
- 안드로이드 OS가 알아서 View를 추출하여 변수에 담아준다.
- 이를 통해 개발자가 View를 직접 추출하지 않고 사용할 수 있다.
✔️ 사전 작업
- View Binding을 사용하기 위해서는 app 수준의 gradle 파일에 다음과 같이 추가해준다.
gradle(Moudule) - android { ... } 내부에 해당 코드 삽입
viewBinding {
enabled = true
}
✔️ 예제 코드
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textAppearance="@style/TextAppearance.AppCompat.Large" />
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="10 + 10" />
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="10 - 10" />
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="10 * 10" />
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="10 / 10" />
</LinearLayout>
MainActivity.kt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.View.OnClickListener
import com.test.android02_viewbinding.databinding.ActivityMainBinding
import com.test.android02_viewbinding.databinding.ActivityTestBinding
class MainActivity : AppCompatActivity() {
// ViewBinding 객체를 담을 변수
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
// activityMainBinding.button.setOnClickListener {
// activityMainBinding.textView.text = "10 + 10 = ${10 + 10}"
// }
//
// activityMainBinding.button2.setOnClickListener {
// activityMainBinding.textView.text = "10 - 10 = ${10 - 10}"
// }
//
// activityMainBinding.button3.setOnClickListener {
// activityMainBinding.textView.text = "10 * 10 = ${10 * 10}"
// }
//
// activityMainBinding.button4.setOnClickListener {
// activityMainBinding.textView.text = "10 / 10 = ${10 / 10}"
// }
activityMainBinding.run {
button.run {
setOnClickListener {
activityMainBinding.textView.text = "10 + 10 = ${10 + 10}"
}
}
button2.run {
setOnClickListener {
activityMainBinding.textView.text = "10 - 10 = ${10 - 10}"
}
}
button3.run {
setOnClickListener {
activityMainBinding.textView.text = "10 * 10 = ${10 * 10}"
}
}
button4.run {
setOnClickListener {
activityMainBinding.textView.text = "10 / 10 = ${10 / 10}"
}
}
}
}
}
✔️ 코드 리뷰
- activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
- ViewBinding 객체를 가져온다.
- layoutInflater : XML 파일을 통해 객체를 생성하는 도구
- setContentView(activityMainBinding.root)
- viewBinding 객체가 관리하는 View 중에 최상위 View 중 지정하여 화면에 나타나게 한다.
- activityMainBinding을 통해 객체의 ID 값을 가져올 수 있다.
- 리스너를 구현하면서 오버라이딩할 함수가 하나일 경우 고차 함수를 이용하여 작성할 수 있다.
'Computer > Android' 카테고리의 다른 글
[28일차 Android] Space (0) | 2023.06.10 |
---|---|
[28일차 Android] Include Other Layout (0) | 2023.06.10 |
[27일차 Android] Layout(LinearLayout, RelativeLayout, ConstraintLayout) (0) | 2023.06.09 |
[27일차 Android] View의 기본 개념 (0) | 2023.06.07 |
[27일차 Android] 동작 원리 (0) | 2023.06.07 |