이번에는 kotlin에서 ViewBinding에 대해서 알아보겠습니다.
View Binding이란 XML 레이아웃의 View를 참조할 수 있게 만들어주는 기능, findViewById와 Kotlin Sythetics를 대체하는 기능
findViewById의 경우 코딩중에 서로 type이 맞지 않으면 오류가 발생할 수 있지만 View Binding을 사용하면 다음과 같은 오류에 대해서 자유로울 수 있다.
사용 방법에 대해서 알아보겠습니다.
사용방법
Step 1. Build.gradle파일에 viewBinding 구문 추가
plugins {
id 'com.android.application'
id 'kotlin-android'
}
android {
compileSdkVersion 30
buildToolsVersion "30.0.3"
defaultConfig {
applicationId "com.example.viewbinding_kotlin"
minSdkVersion 21
targetSdkVersion 30
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
kotlinOptions {
jvmTarget = '1.8'
}
//Android studio 3.6 버전대
// viewBinding{
// enable = true
// }
//Android studio 4.0 이상
buildFeatures{
viewBinding = true;
}
}
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
Step 2. 다음 우측상단의 "Sync Now" 클릭!
Step 3. kotlin코드에 view Binding에 대한 코드로 수정
View Binding을 활성화하면 레이아웃 클래스 뒤에 "Binding"이 붙은 pascal Case로 생성된다.
다음 코드와 및 ViewBinding에 대한 간단한 예제를 넣어두었습니다. 어떻게 접근해서 사용하는지 보면 되겠습니다.
//MainActivity.kt
class MainActivity : AppCompatActivity() {
private lateinit var binding : ActivityMainBinding
//binding설정 (xml파일이름,공백제거,대문자+"Binding"이 붙음)
//ex) activity_main -> AcitivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater) //binding 초기화
setContentView(binding.root) //setContentView는 binding.root로 꼭 넣어주기
//ViewBinding을 활용한 예제
//ex) "m_textview"의 id를 가진 textview에대한 clickListener
binding.mTextview.setOnClickListener {
binding.mTextview.text = "ViewBinding을 통한 TextView text 변경완료"
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<!-- ativity_main.xml -->
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/m_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="버튼을 클릭하면 ViewBinding을 통해 글자가 변경됩니다."
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
android:background="#F0F0F0"
android:padding="10dp"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
다음과 같이 하여 TextView를 클릭했을때 ViewBinding을 통해 TextView의 text를 변경할 수 있습니다.
'🖥 Programming > 📱 Android (Kotlin)' 카테고리의 다른 글
[Android][kotlin] MVVM 패턴공부 (0) | 2021.10.30 |
---|---|
[Android][kotlin] DataBinding & LiveData 같이 사용하기 (0) | 2021.10.28 |
[Andorid][kotlin] Android JetPack 구성도 (0) | 2021.10.27 |
[Android][kotlin] LiveData 알아보기 (0) | 2021.10.26 |
[Android][kotlin] Execution failed for task ':app:dataBindingMergeDependencyArtifactsDebug'. 오류 해결 (0) | 2021.10.22 |
[Android] RecyclerView (리사이클러뷰) 알아보기 (0) | 2021.10.22 |
[Android][kotlin] No type arguments expected for class Call 에러 (0) | 2021.10.21 |
[kotlin][Android] retrofit2 (레트로핏) 사용방법 (0) | 2021.10.20 |