View Binding 사용법

프로그래밍/안드로이드 2021. 8. 8. 22:20
반응형

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

 

반응형

댓글을 달아 주세요