뷰 바인딩이란 xml과 액티비티의 연결을 간편화시켜주는 기능이다
뷰 바인딩이 없던 시절의 안드로이드 개발자는 아래와 같이 xml의 요소를 findViewById를 통해 변수에 연결시켜야만했다
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="버튼을 눌러주세요" />
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
setContentView(R.layout.activity_main)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
//타입을 지정하고 id를 가져와서 변수에 매칭시킨다
var button = findViewById<Button>(R.id.button)
// 버튼에 대한 동작작업
button.setOnClickListener { ... }
하지만 ViewBinding을 사용한다면 일일이 매칭시킬필요없이 연결된 xml의 요소들을 바로작업할수있다
class MainActivity : AppCompatActivity() {
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
//바인딩해서 바로사용
activityMainBinding.apply {
val buttonListener =ButtonListener()
button.setOnClickListener (buttonListener)
}
}...
사용법
1. gradle 설정
android {
...
//뷰 바인딩 사용
viewBinding{
enable = true
}
}
이렇게 작성하고 꼭 코드상단 sync now를 누른다
2. 액티비티
class MainActivity : AppCompatActivity() {
//객체를 담을 변수선언
lateinit var activityMainBinding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
//ViewBinding 객체를 가져온다
// layoutInflater : layout 폴더에 있는 xml 파일을 통해 화면 객체를 만들 수 있는 도구
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
//ViewBinding 객체가 관리하는 화면요소중 최 상단에있는 화면요소를 지정하여 화면이 나오도록한다
setContentView(activityMainBinding.root)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
insets
}
// 바로사용가능!
activityMainBinding.button
xml의 이름에 따라 바인딩 클래스의 이름이 정해지는 규칙이 있다 규칙은 아래와같다
//xml이름 : activity_main.xml
ActivityMainBinding
//xml이름 : activity_example.xml
ActivityExampleBinding
//xml이름 : aaa_bbb_ccc.xml
AaaBbbCccBinding