본문 바로가기

Android(Kotlin)

[Kotlin] [Android Studio] - View binding(뷰 바인딩)을 통해 결합 클래스 필드 참조, 뷰 조작,뷰 선택

 

 

증상

뷰가 선택이 안됨. 예전과 같은 방식으로는

 

해결

1. 프로젝트명/app/build.gradle 에 다음 코드 추가.

android{
...(다른 코드들)

 	 buildFeatures {
      	  viewBinding true
    	}
}

아래 : 레이아웃 파일

activity_main.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=".MainActivity">

    <TextView
        android:id="@+id/tv"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="사랑해"
        android:textColor="#E87878"
        android:textSize="34sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/tv_sub"
        android:layout_width="115dp"
        android:layout_height="85dp"
        android:text="이건 보이냐?"
        android:textColor="#BEF376"
        android:textSize="20sp"
        tools:layout_editor_absoluteX="159dp"
        tools:layout_editor_absoluteY="85dp" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        android:onClick="funTest"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        tools:layout_editor_absoluteY="280dp" />

</androidx.constraintlayout.widget.ConstraintLayout>

2. binding을 통해 xml(레이아웃) 파일의 View 들(TextView,Button 등) 을 조작할 Activity 파일에 다음 코드 입력

 

private lateinit var binding: ActivityMainBinding
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)

최종 형태 아래 : 액티비티 파일

MainActivity.kt

package com.example.myapplication

import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.example.myapplication.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
	private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

//        binding.tv.text = "가즈아"
//        binding.btnTest.text="보여?"

    }

    var state = true
    fun funTest(view: View) {

        state = !state
        if (state) {
            binding.tv.text = "true"
            binding.tvSub.text ="해냈다"
        } else {
            binding.tv.text = "false"
            binding.tvSub.text ="요롤레이 요호호"
        }
    }

}

View Binding 을 통해야지만 이제는 이를 통해 TextView, Button 등과 같은 대상들을 id 값으로 참조(선택)할 수 있다.

binding.(view들의 id값 카멜표기법).(텍스트를 조작한다면 text 등)

예시

binding.tv.text ="hello~"

여기서 카멜 표기법이란

레이아웃 파일에서 id 값을 tv_sub 이런 식으로 주었을때

tvSub 으로 선택할 수 있게 됨을 말한다.

 

카멜이란 낙타라는 의미로 변수명중 의미가 구분되는 단어의 첫 글자를 대문자로 표기해주는 코딩 작성 규칙을 의미한다.(가독성의 이유)

 

binding 이라는 변수에 담아준뒤 이제 아이디값(카멜표기법으로 자동변환)으로 참조해주면 텍스트값을 변화시켜줄 수 있다.

 

좋은 참고 블로그

https://white-hacker.tistory.com/entry/Android-%EB%B7%B0-%EB%B0%94%EC%9D%B8%EB%94%A9-View-Binding

 

[Android] 뷰 바인딩 (View Binding)

뷰 바인딩이란? 말그대로 묶는건데, 레이아웃 xml 파일에 대한 액티비티 클래스를 정의 해줄 필요없이 자동으로 각 뷰에 대해 이어서(connect) 생성해주는 기능을 말한다. 뷰바인딩을 사용해야 하

white-hacker.tistory.com

*최고는 역시 공식문서!! 참고하세요

https://developer.android.com/topic/libraries/view-binding?hl=ko#kotlin 

 

뷰 결합  |  Android 개발자  |  Android Developers

뷰 결합 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다. 바인딩

developer.android.com