View Binding이란 XML 레이아웃 내의 View를 참조할 수 있게 만들어주는 기능으로, findViewById와 Kotlin Sythetics를 대체하는 기능이다.
findViewById에 비해 간편하게 View를 참조할 수 있으며, 코딩 중에 발생할 수 있는 여러 문제들을 예방할 수 있다.
(예: 서로 다른 XML에 동일한 id의 View가 있을 경우 발생할 수 있는 문제)
처음 안드로이드 스튜디오 공부를 시작했을 때 Kotlin Sythetics를 사용했는데 찾아보니 미래에 사라질 예정이라고...
자세한 내용은 아래 링크에서 확인하면 된다.
뷰 결합 | Android 개발자 | Android Developers
사용방법
앱 Gradle에 다음 구문을 추가한다
build.gradle (:app)
android {
// Android Studio 3.6 버전대
viewBinding {
enabled = true
}
// Android Studio 4.0 이상
buildFeatures {
viewBinding = true
}
}
그 후에 Layout과 연결 작업을 해야 한다.
MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding // 1
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) // 2
setContentView(binding.root) // 3
}
}
View Binding을 활성화하면 레이아웃 xml 파일에 대한 클래스가 Binding이 뒤에 붙은 Pascal Case로 생성된다.
(activity_main.xml → ActivityMainBinding)
해당 클래스를 inflate하고 setContentView에 binding.root를 전달하면 준비가 완료된다.
프래그먼트에서의 사용 방법은 다음과 같다.
MainFragment.kt
// fragment_main.xml 파일과 결합할 때
class MainFragment : Fragment() {
private var _binding: FragmentMainBinding? = null
private val binding get() = _binding!!
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
_binding = FragmentMainBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
입력해야 할게 액티비티보다 조금 더 있다.
이렇게 결합을 하고 나면 findViewById를 사용할 필요 없이 바로 view를 참조할 수 있다.
Xml 내의 view들은 Camel Case로 참조한다.
MainActivity.kt
// ID가 'tv_text1'인 TextView의 텍스트를 바꿀 때
binding.tvText1.text = "Hello World"
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[Android/Firebase] 안드로이드 프로젝트에 Firestore 연동 (0) | 2021.01.03 |
---|---|
[Android/Kotlin] DialogFragment 커스텀 대화상자 만들기 (0) | 2021.01.02 |
[Android/Kotlin] Dialog 대화상자 표시 (0) | 2021.01.01 |
[Android/Kotlin] 리사이클러 뷰 클릭 이벤트 (0) | 2021.01.01 |
[Android/Kotlin] RecyclerView 리사이클러 뷰 (0) | 2020.12.31 |