1 분 소요

1. 뷰 바인딩

뷰 바인딩 은 레이아웃 XML 파일에 선언한 뷰 객체를 코드에서 쉽게 이용하는 방법이다.
레이아웃 XML 파일에 등록한 뷰는 findViewById() 함수로 얻어서 사용해야 한다.
이렇게 하게 되면 수많은 뷰를 findViewById()로 하나하나 가져와야 하기 때문에 매우 반복적이고 귀찮은 작업이 될 수 밖에 없다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <Button
        android:id="@+id/visibleBtn"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="visible"/>
    <TextView
        android:id="@+id/targetView"
        android:layout_width="match_parent"
        android:layout_height="wrap_parent"
        android:text="hello world"
        android:background="#FF0000"
        android:textColor="#FFFFFF"/>
    <Button
        android:id="@+id/invisibleBtn"
        andorid:layout_widht="match_parent"
        android:layout_height="wrap_content"
        android:text="invisible"/>

위처럼 작성한 레이아웃 XML이 있다고 가정하고 뷰바인딩 기법을 사용해보겠다.
우선 뷰 바인딩을 사용하려면 그래들 파일에 아래와 같이 선언해야 한다.

android{
    viewBinding{
        enabled=true
    }
}

build.gradle 파일을 열고 android 영역에 buildFeatures를 선언한다.
그리고 그 안에 뷰 바인딩을 적용하라는 의미로 viewBinding = true를 설정한다.
이렇게 하면 레이아웃 XML 파일에 등록된 뷰 객체를 포함하는 클래스가 자동으로 만들어지고 우리는 따로 코드에서 뷰를 선언하고 findViewById()를 호출하지 않아도 된다.

자동으로 만들어지는 클래스의 이름은 레이아웃 XML파일명을 따른다.
첫 글자를 대문자로 하고 밑줄(_)은 빼고 뒤에 오는 단어를 대문자로 만든 후 ‘Binding’을 추가한다.
(ex) activity_main.xml -> ActivityMainBinding)

자동으로 만들어진 클래스의 inflate() 함수를 호출하면 바인딩 객체를 얻을 수 있다.
이때 인자로 layoutInflater를 전달한다. 그리고 바인딩 객체의 root 프로퍼티에는 XML의 루트 태그 객체가 자동으로 등록되므로 액티비티 화면 출력은 setContentView() 함수에 binding.root를 전달하면 된다.

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        //바인딩 객체 획득
        val biniding = ActivityMainBinding.inflate(layoutInflater)
        //액티비티 화면 출력
        setContentView(binding.root)

        //뷰 객체 이용
        binding.visibleBtn.setOnClickListener{
            binding.targetView.visibility = View.VISIBLE
        }
        binding.invisibleBtn.setOnClickListener{
            binding.targetView.visibility = View.INVISIBLE
        }
    }
}

바인딩 객체에 등록된 뷰 객체명은 XML 파일에 등록한 뷰의 id값을 따른다.
즉, XML에 뷰를 < Button android:id=”@+id/visibleBtn” />처럼 등록했다면 바인딩 객체에 visibleBtn이라는 프로퍼티명으로 등록된다. 따라서 binding.visibleBtn으로 이용하면 됨.

바인딩 클래스로 만들고 싶지 않은 XML파일이 있다면 루트 태그에 tools:viewBindingIgnore=”true”라는 속성을 추가하면 된다.

댓글남기기