View Binding은 안드로이드 앱에서 레이아웃 내의 위젯(버튼, 텍스트뷰 등)들에 프로그램으로 접근하기 위한 방법입니다. View Binding은 Android Studio 3.6 Canary 11 이상 부터 사용할 수 있습니다(Canary 채널은 개발자들이 안드로이드 스튜디오 최신 버전을 테스트할 수 있는 빌드를 제공합니다).
예제로 사용할 HelloKotlin 프로젝트 구성 입니다.
메인 레이아웃: activity_main.xml * TextView : id - hello_text * include : id = text_panel include로 포함되는 레이아웃 : inclue_text_panel.xml * TextView : id - msg_text * Button : id - msg_btn |
View Binding을 사용하기 위해서는 "build.gradle (Module: HelloKotlin.app)" 파일에 다음 내용을 추가 합니다.
android {
...
buildFeatures {
viewBinding = true
}
}
build.gradle파일에 이 내용이 추가되면 화면 위쪽에 gradle 파일이 변경되었으니 "Sync Now" 를 할 것인지 물어봅니다. 여기서 "Sync Now"를 해주면 View Binding에 필요한 파일들이 생성됩니다. 이 기능은 "File -> Sync Project with Gradle files"를 실행한 것과 같습니다.
이제 프로그램에서 자동 생성된 View Binding용 클래스를 import 한 후에 위젯에 접근할 수 있습니다.
자동으로 생성된 ActivityMainBindig 클래스를 import 합니다. 클래스 이름은 activity_main.xml 파일의 이름을 카멜 표기법으로 표시하여 만들어 집니다. 레이아웃 파일의 이름을 변경하면 import할 클래스명도 변경됩니다.
import com.tistory.offbyone.hellokotlin.databinding.ActivityMainBinding
멤버 변수로 ActivityMainBinding 객체의 변수를 선언합니다. 이후에 이 변수를 사용해서 위젯에 접근합니다.
private lateinit var binding: ActivityMainBinding
ActivityMainBiding 객체를 구해서 ContentView로 등록합니다. Content View는 binding의 root 뷰 입니다.
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
이제 각각의 위젯을 위젯에 binding.아이디 로 접근할 수 있습니다. 아이디는 카멜 케이스로 변경됩니다. include된 레이아웃은 <include android:id="@+id/text_panel" /> 태그의 아이디를 통해서 접근 가능합니다. 역시 카멜 케이스가 사용됩니다.
binding.helloText.text = "Hello, World!"
binding.textPanel.msgText.text = "Message"
View Binding을 사용해서 프로그램에서 위젯에 접근하는 방법을 알아보았습니다.
※ 참고
위젯에 접근하는 예전 부터 사용해오던 가장 일반적인 방법은 findViewById() 함수를 사용하는 것이며 여전히 사용할 수 있습니다.
var helloText: TextView = findViewById(R.id.hello_text)
var msgText: TextView = findViewById(R.id.msg_text)
앞의 두 가지 View Binding을 사용하는 방법과 findViewById() 함수를 사용하는 방법은 Kotlin과 Java 모두에서 사용할 수 있습니다.
Kotlin에서만 사용 가능한 방법으로 'kotlin-android-extensions'를 사용해서 위젯의 아이디로 바로 접근 가능한 방법이 있습니다.
hello_text.text = "Hello! World."
msg_text.text = "Message"
위와 같이 바로 위젯의 아이디를 이용해서 사용이 가능합니다. 이 방법은 Koltin 1.4.20-M2 부터 deprecated 되었습니다.
그리고 안드로이드 스튜디오 4.1 부터는 더 이상 'kotlin-android-extensions'을 기본으로 제공하지 않게 되었습니다.
하지만, 아직도 사용할 수는 있습니다.
- build.gradle 파일에 플러그인을 수동으로 추가합니다.
plugins {
...
id 'kotlin-android-extensions'
}
- 다음 코드를 소스에 넣습니다. 그 다음 부터는 위젯 아이디를 바로 사용할 수 있습니다.
import kotlinx.android.synthetic.activity_main.*
이 플러그인은 문제가 발생할 소지가 있어서 더이상 지원되지 않습니다. View Binding을 사용하는 것이 권장 됩니다.
※ 예제소스
'프로그래밍 > 안드로이드' 카테고리의 다른 글
안드로이드 앱에서 타이틀바 없애기 및 전체화면 만들기 (1) | 2021.08.06 |
---|---|
안드로이드 스튜디오 Gradle 업데이트 오류 (0) | 2021.08.06 |
안드로이드 스튜디오에서 개발용으로 스마트폰 인식 안될 때 사용해 볼 방법 (0) | 2021.07.31 |
안드로이드 스튜디오 Kotlin 프로젝트 만들기 (0) | 2019.04.06 |
안드로이드 디버깅 Logcat을 이용해서 로그 남기기 (0) | 2018.04.20 |