-
[안드로이드] 뷰 바인딩카테고리 없음 2024. 4. 5. 09:54
기존 findViewById를 사용했었지만 뷰 바인딩으로 xml의 id를 코드에서 직접 참조할 수 있게 되었다.
뷰 바인딩을 사용하려면 build.gradle.kts에서 아래 설정을 활성화 해주어야 한다.android { viewBinding { enable = true } }
사용법
뷰 바인딩으로 xml의 id를 참조할 시 카멜 케이스로 자동으로 바뀌며 참조할 수 있게 되었다.
또한 뷰 바인딩 사용 시 setContentView를 binding.root로 해줘야 한다.
(기존 방식으로 id로 setContentView를 했다고 가정하고 바인딩으로 내부 스타일을 바꾼 경우 화면에서 바뀌지 않는다.)
<!-- activity_main.xml --> <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:id="@+id/test_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_weight="1" android:text="TextView" /> </LinearLayout>
// 기존 방식 class MainActivity : AppCompatActivity() { private lateinit var textView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) textView = findViewById(R.id.test_text_view) } }
// 뷰 바인딩 class MainActivity : AppCompatActivity() { // xml인 activity_main이 ActivityMainBinding(파스칼케이스)로 바뀌어서 참조할 수 있게 된다. // 만약 activity_main_23이면 ActivityMain23Binding으로 참조가 가능할 것이다. private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) } private lateinit var textView: TextView override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(binding.root) // 꼭 binding.root로 설정해주어야 한다. textView = binding.textTextView // xml의 id를 카멜케이스로 참조가 가능해진다. } }