예전에는 xml 파일의 뷰들과 연결하기 위해 findViewById를 사용했다. (물론 지금도 사용 가능하긴 함)
Kotlin을 사용할 땐 Kotlin-android-extensions을 사용할 수 있었는데, 서로다른 xml파일에서 동일한 id 를 사용할 경우 코드가 헷갈리는 경우가 많은 등의 이유로 올해부터 지원이 중단된다고 한다.
그래서 구글에서는 Android Studio 4.1 버전부터 View binding을 사용하도록 안내하고 있다.
View Binding 이란??
View binding을 활성화 하면 각 XML 파일에 대한 바인딩 클래스가 생성이 된다. 바인딩 클래스의 인스턴스를 통해서 view에 접근할 수 있고, 레이아웃에 ID가 있는 view를 참조할 수 있다.
다시 설명하자면 View binding은 findViewById를 사용하지 않고 object에 xmll view 컴포넌트의 ID를 찾아서 inflate 해 준다. ( ViewBinding은 XML layout을 위해서 binding 할 object를 생성한다.
바인딩 클래스는 자동으로 생성이 되는데, 이름이 만들어지는 기준이 있다.
- Pascal case(첫 글자 대문자) + Camel case(단어 단위로 첫 글자 대문자)
- 파일 이름 끝에 Binding 이라는 단어가 붙는다.
==>ex) activity_main.xml --> ActivityMainBinding
View binding을 활성화 하기 위해서는 간단한 코드 추가가 필요하다.
build.gradle 파일에 아래 코드를 추가하자.
android {
...
buildFeatures {
viewBinding = true
}
}
View binding 사용예시
//EditText에 아이디를 입력하고, button을 클릭하면 TextView의 글이 변경되는 코드
package com.example.textviewkt
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.textviewkt.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding // 1.
override fun onCreate(savedInstanceState: Bundle?) { //앱이 최초로 실행될 때 수행되는 구문
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) // 2.
setContentView(binding.root) // 3.
binding.btnGetText.setOnClickListener {
val title = binding.etId.text.toString()
binding.tvResult.text = title
}
}
}
- View binding을 활성화 했기 때문에 레이아웃 xml파일에 대해 ActivityMainBinding 이라는 클래스가 자동으로 생성이 된다.
- 1, 2, 3 과정을 통해 binding 바인딩 변수를 활용하여 마음껏 해당 xml 파일 내의 뷰 id 접근이 가능해진다. (binding 객체에 각 뷰의 id가 property로 제공된다)
- 여기서 xml파일의 뷰 id도 네이밍규칙 적용으로 인해서 btn_getText -> btnGetText 로 자동으로 변환된다.
'안드로이드 > [Kotlin]' 카테고리의 다른 글
[Kotlin] 상단의 Status Bar를 투명하게 만들어 보자. (0) | 2021.10.04 |
---|---|
[Kotlin] ListView 생성. Custom Adapter 사용하기 (0) | 2021.08.20 |
[Kotlin] Activity 전환 & 데이터 전달 (Intent, putExtra...) (0) | 2021.08.07 |
[Kotlin] 클래스의 상속(Inheritance)과 오버라이딩(Overriding) (0) | 2021.05.08 |
[Kotlin] 클래스와 생성자(constructor) (0) | 2021.05.08 |