안드로이드 Binding을 사용하기 위해서는 app단의 build.gradle에서 아래 코드를 추가해준다.
// Android Gradle Plugin Version 4.0 이후
android {
...
buildFeatures {
viewBinding true
}
...
}
// Android Gradle Plugin Version 4.0 이전
android {
...
viewBinding {
enabled = true
}
...
}
Android Gradle Plugin Version 확인은 File - Project Structure 에서 확인 할 수 있다.
더보기
아래 코드는 ActivityMain.xml의 버튼을 클릭하면 이벤트가 발생하는 코드의 예시이다.
// 예시 코드
class MainActivity : AppCompatActivity() {
lateinit var binding: XML명 // ex) activity_main.xml의 경우 ActivityMainBinding
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
binding = ActivityMainBinding.inflate(layoutInflater,null,false)
binding.Button.setOnClickListener()
{
// doSomething
}
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return binding.root
} // 해당부분이 없으면 화면이 나오지않음
...
}
혹은 아래와 같이 사용할수도 있는듯 하다
개인적으로 여태 위 코드를 사용했지만 아래코드가 더 깔끔한듯!
앞으로는 아래 코드를 사용해야겠다
// 예시 코드
class MainActivity : AppCompatActivity() {
val binding by lazy { MainLayoutBinding.inflate(layoutInflater) }
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
}
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
return binding.root
} // 해당부분이 없으면 화면이 나오지않음
...
}
setContentView(R.layout.activity_main)을 setContentView(binding.root)로 변경한다!!!
-> 만약 view binding도 사용하고, setContentView 기존과 같은 방식으로 layout resource id를 넘겨준다면, 두번의 layout inflate 가 발생 됩니다. 또한 이렇게 생성된 root layout object는 서로 다른 객체이니 각각 가르키는 view가 다르니 원하는대로 동작하지 않는다.
Inflate 인수
코틀린 익스텐션(xml 변수명만으로 kt파일에서 코딩하는것)을 구글에서 권장하지 않으면서 뷰바인딩을 쓰는데 뷰바인딩을 할때 inflate를 사용한다. inflate는 xml에 표시된 레이아웃들을 객체화 시키는 행동이다.
inflate는 세개의 인수가 있는데,
inflate(resource: Int, root: ViewGroup?, attachToRoot: Boolean) 과 같은 형태로 사용된다
- inflater : View를 만들고싶은 레이아웃 파일(XML)의 id
- root : 생성될 View의 parent를 명시한다
- AttachToRoot : true로 설정해 줄 경우 root의 자식 View로 자동 추가되며, 이때 root는 null일수없다.
- return : attachToRoot에 따라서 리턴값이 달라지며, true일경우 root가, false일경우 XML내 최상위 뷰가 리턴된다.
'프로그래밍 > Android' 카테고리의 다른 글
[Android] 상단 바 제거 (0) | 2021.06.24 |
---|---|
[Android]갤럭시 AVD 설치 (0) | 2021.06.24 |
XML 파일 태그별 기능 (0) | 2021.06.10 |
안드로이드 스튜디오 단축키 (0) | 2021.05.15 |
Android Studio 실제 단말 연결 (0) | 2021.03.17 |
댓글