[안드로이드] 뷰(View) - 뷰 바인딩

·2022년 5월 14일
0

Doit 안드로이드

목록 보기
3/12
post-thumbnail

뷰 바인딩

  • 그래들 파일에 뷰 바인딩 설정
android {
	// (... 생략 ...)
	viewBinding {
    	enabled = true
    }
}

build.gradle 파일을 열고 android 영역에 buildFeatures를 선언
그 안에 바인딩을 적용하라는 의미로 viewBinding = true 설정

Sync Now까지 해줘야 완료

이렇게 하면 레이아웃 XML 파일에 등록된 뷰 객체를 포함하는 클래스가 자동으로 만들어진다

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

  • acitivity_main.xml -> ActivityMainBinding
  • item_main.xml -> ItemMainBinding

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

  • 바인딩 객체 이용법
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // 바인딩 객체 획득
        val binding = 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 으로 이용하면 된다.
(visible_btn의 경우에도 visibleBtn으로 변환)

뷰 바인딩이 필요 없는 레이아웃 XML 파일이 있을 경우

그런데 뷰 바인딩을 이용하겠다고 선언하면 XML 하나당 바인딩 클래스가 자동으로 생성. 이때 XML 파일의 루트 태그에 tools:viewBindingIgnore="true" 속성을 추가한다. 이 속성을 추가하면 해당 파일을 위한 바인딩 클래스를 생성하지 않는다.

profile
SOOP

0개의 댓글