본문 바로가기
프로그래밍/안드로이드

View Binding 사용법

by pentode 2021. 8. 8.

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"를 실행한 것과 같습니다.

build features


이제 프로그램에서 자동 생성된 View Binding용 클래스를 import 한 후에 위젯에 접근할 수 있습니다.

View Binding 코드 예시


자동으로 생성된 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을 사용하는 것이 권장 됩니다.

 

※ 예제소스

HelloKotlin.zip
0.68MB

 

반응형