Uknow's Lab.

뷰 바인딩(View Binding)은 코틀린 코드 상에서 findViewById를 통해 일일히 뷰를 찾아줄 필요 없이,

 

코틀린 코드 상에서 레이아웃에 더 쉽게 접근할 수 있도록 해주는 기능입니다.

 

뷰 바인딩 적용 방법은 아래와 같습니다.

 

 

 

build.grandle 에 아래 코드 삽입

buildTypes {
    buildFeatures {
        viewBinding true
    }
}

 

build.grandle의 buildTypes 부분에 위 코드를 삽입합니다.

 

 

코틀린 코드 상에서 xml 참조하기

<?xml version="1.0" encoding="utf-8"?>
<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=".LoginActivity">
    
    <androidx.appcompat.widget.AppCompatButton
        android:id="@+id/btn_login"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginHorizontal="50dp"
        android:text="@string/obj_login"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_bias="0.8" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

액티비티는 보통 Kotlin(Java) 파일과 xml 파일이 쌍을 이룹니다.

 

LoginActivity.kt 과 이에 대응되는 레이아웃 파일인 activity_login.xml이 있고,

여기에 뷰 객체인 btn_login을 생성하였습니다.

 

private lateinit var binding: ActivityLoginBinding

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    binding = ActivityLoginBinding.inflate(layoutInflater)
    setContentView(binding.root)

    binding.btnLogin.setOnClickListener {
        val intent = Intent(applicationContext, MainBaseActivity::class.java)
        startActivity(intent)
    }
}

코틀린 코드 상에서 ActivityLoginBindig을 선언하고,

binding을 inflate를 호출하고, setContentView에 root값을 인자로 넘겨줍니다.

 

이제 binding.(viewName)을 통해 xml 상의 뷰를 참조할 수 있습니다.

 

 

 

xml과 코틀린 코드 상의 변수명때문에 헷갈릴 수 있는데,

  activity_login => ActivityLoginBinding

  btn_login => btnLogin

과 같이 카멜 표기법으로 변환한다 생각하면 쉬울 것 같습니다.

 

 

 

매번 binding을 적기 귀찮다면,

 

binding.run {

   btnLogin.setonClickListener { }

}

와 같이 매번 binding을 쓰는 과정을 생략할 수 있습니다.

 

 

profile

Uknow's Lab.

@유노 Uknow

인생은 Byte와 Double 사이 Char다. 아무말이나 해봤습니다.