반응형
안드로이드 스튜디오 4.0이상에서의 뷰바인딩하는 방법입니다.
findViewById를 사용해서 뷰(View) 객체를 얻는 것보다 상당히 간편합니다.
1. 모듈 gradle에 뷰바인딩 클래스를 생성하도록 설정합니다.
android {
...
buildFeatures{
viewBinding true
}
...
}
2. 뷰바인딩 클래스 이름 규칙은 아래와 같이 레이아웃 XML 파일의 이름에 따라 결정됩니다.
레이아웃 XML | 뷰바인팅 클래스명 |
activity_main.xml | ActivityMainBinding |
item_list.xml | ItemListBinding |
3. 뷰바인딩 객체 사용하기
(1) 멤버 변수로 뷰바인딩 변수를 생성한다.
뷰바인딩 변수는 onCreate 에서 초기화를 하기 위해서 lateinit로 지정한다.
class MainActivity : AppCompatActivity() {
lateinit var binding : ActivityMainBinding;
...
}
(2) 뷰바인딩 객체를 초기화하고, Activity의 레이아웃(activity_main.xml)으로 설정합니다.
뷰바인딩의 root는 레이아웃의 최상위 뷰(View)입니다.
class MainActivity : AppCompatActivity() {
lateinit var binding : ActivityMainBinding;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater);
setContentView(binding.root)
}
}
(3) 레이아웃의 뷰 객체를 활용하기 위해서는 뷰에 id를 지정하면 뷰바인딩의 변수명으로 사용하면됩니다.
<TextView android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
class MainActivity : AppCompatActivity() {
lateinit var binding : ActivityMainBinding;
override fun onCreate(savedInstanceState: Bundle?) {
...
binding.textView.text = "안녕하세요.";
}
}
4. 전체소스
[모듈 gradle]
apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
android {
compileSdkVersion 30
buildFeatures{
viewBinding true
}
defaultConfig {
applicationId "com.test"
minSdkVersion 24
targetSdkVersion 30
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: "libs", include: ["*.jar"])
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
implementation 'androidx.core:core-ktx:1.6.0'
implementation 'androidx.appcompat:appcompat:1.3.1'
implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
}
[레이아웃 XML]
<?xml version="1.0" encoding="utf-8"?>
<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/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
[코틀린]
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.dksys.visitcall.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
lateinit var binding : ActivityMainBinding;
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_main)
binding = ActivityMainBinding.inflate(layoutInflater);
setContentView(binding.root)
binding.textView.text = "안녕하세요.";
}
}
반응형
'안드로이드' 카테고리의 다른 글
안드로이드 코틀린 - google play-services를 이용한 위치정보 얻기 (0) | 2021.09.27 |
---|---|
안드로이드 코틀린 - 권한(Permission) 요청 (0) | 2021.09.26 |
안드로이드 코틀린(Kotlin) - 오류 Module was compiled with an incompatible version of Kotlin. (0) | 2021.09.10 |
안드로이드 개발 Java에서 Kotlin으로의 항해 (0) | 2021.09.01 |
안드로이드 에뮬레이터 스크린샷과 저장 위치 (1) | 2021.06.10 |
댓글