본문 바로가기
🖥 Programming/📱 Android (Kotlin)

[Android][kotlin] ViewBinding (뷰바인딩)

by MinChan-Youn 2021. 10. 25.

이번에는 kotlin에서 ViewBinding에 대해서 알아보겠습니다.

View Binding이란 XML 레이아웃의 View를 참조할 수 있게 만들어주는 기능, findViewById와 Kotlin Sythetics를 대체하는 기능
findViewById의 경우 코딩중에 서로 type이 맞지 않으면 오류가 발생할 수 있지만 View Binding을 사용하면 다음과 같은 오류에 대해서 자유로울 수 있다.


사용 방법에 대해서 알아보겠습니다.

 

사용방법

Step 1. Build.gradle파일에 viewBinding 구문 추가

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.viewbinding_kotlin"
        minSdkVersion 21
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }

    //Android studio 3.6 버전대
//    viewBinding{
//        enable = true
//    }
    //Android studio 4.0 이상
    buildFeatures{
        viewBinding = true;
    }
}

dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.6.0'
    implementation 'androidx.appcompat:appcompat:1.3.1'
    implementation 'com.google.android.material:material:1.4.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.3'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}

 

 

Step 2. 다음 우측상단의 "Sync Now" 클릭!

 

 

Step 3. kotlin코드에 view Binding에 대한 코드로 수정

View Binding을 활성화하면 레이아웃 클래스 뒤에 "Binding"이 붙은 pascal Case로 생성된다.

다음 코드와 및 ViewBinding에 대한 간단한 예제를 넣어두었습니다. 어떻게 접근해서 사용하는지 보면 되겠습니다.

//MainActivity.kt
class MainActivity : AppCompatActivity() {
    private lateinit var binding : ActivityMainBinding
    //binding설정 (xml파일이름,공백제거,대문자+"Binding"이 붙음)
    //ex) activity_main -> AcitivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater) //binding 초기화
        setContentView(binding.root) //setContentView는 binding.root로 꼭 넣어주기

        //ViewBinding을 활용한 예제
        //ex) "m_textview"의 id를 가진 textview에대한 clickListener
        binding.mTextview.setOnClickListener {
            binding.mTextview.text = "ViewBinding을 통한 TextView text 변경완료"
        }
    }
}
<?xml version="1.0" encoding="utf-8"?>
<!-- ativity_main.xml -->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/m_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="버튼을 클릭하면 ViewBinding을 통해 글자가 변경됩니다."
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        android:background="#F0F0F0"
        android:padding="10dp"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

다음과 같이 하여 TextView를 클릭했을때 ViewBinding을 통해 TextView의 text를 변경할 수 있습니다.