view binding을 사용하면 view에 존재하는 값들에 접근할 수 있다.
이전에는 view에 존재하는 값들에 접근하기 위해서는 해당 ID를 사용해서 findViewById를 사용하였다.
이제는 view binding을 사용하면 쉽게 접근할 수 있다.
먼저 앱 수준의 build.gradle에 들어간다.
코드를 보면 android로 싸여있는 코드를 확인할 수 있다.
그 안에 다음과 같은 코드를 적으면 된다.
viewBinding{
enabled=true
}
android에 들어있는 모습을 보면 아래와 같다.
android {
namespace 'com.example.practiceapplication'
compileSdk 32
defaultConfig {
applicationId "com.example.practiceapplication"
minSdk 24
targetSdk 32
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'
}
viewBinding{
enabled=true
}
}
이후 우측 상단의 sync now를 누르면 적용이 된다.
activity와 fragment에서 view binding 사용법이 약간 다른데 그 차이점을 위주로 포스팅해보려 한다.
Activity
새로운 프로젝트를 생성하고 MainActivity 코드를 보면 아래와 같을 것이다.
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
여기서 binding을 선언하고 사용해야 한다.
보통은 onCreate에서만 사용하는 것이 아닌 다른 함수에서도 사용하므로 lateinit을 사용하여 초기화를 나중에 하겠다.
lateinit var binding : 타입
위와 같이 선언을 해야하는데 타입의 경우 xml 파일 이름을 보면 알 수 있다.
우리는 메인 액티비티에 접근하려 하므로 메인 액티비티 xml 파일의 이름을 확인한다.
activity_main으로 되어있다면 언더바를 없애고 시작 단어를 전부 대문자로 바꾸고 Binding을 붙여주면 된다.
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}
}
lateinit을 통해 나중에 초기화를 하겠다고 했으므로 onCreate 함수 내에서 초기화를 해야한다.
class MainActivity : AppCompatActivity() {
lateinit var binding:ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding=ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
}
}
binding을 초기화 해주고 setContentView 안의 파라미터를 binding.root로 바꾸어준다.
만약 특정 함수 안에서만 사용한다고 하면 val binding = ActivityMainBinding.inflate(layoutInflater) 처럼 바로 초기화해도 된다.
Fragment
fragment도 activity와 흐름은 똑같지만 코드가 살짝 다르다.
class SubFragment : Fragment() {
lateinit var binding:FragmentSubBinding
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding=FragmentSubBinding.inflate(inflater)
return binding.root
}
}
}
선언, 초기화, binding.root 반환의 순서로 이루어져있다.
view에 접근
접근 방식은 activity나 fragment나 동일하므로 메인 액티비티를 기준으로 설명하려한다.
binding.아이디를 사용해서 해당 아이디를 가진 곳에 접근할 수 있다.
버튼을 누르면 textView의 text를 바꾸는 코드를 만들어보겠다.
먼저 activity_main.xml 파일에서 textView와 button을 만들고 각각의 id를 txt, btn으로 설정한다.
그리고 버튼에 클릭 이벤트를 만들어주면 된다.
class MainActivity : AppCompatActivity() {
lateinit var binding:ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding=ActivityMainBinding.inflate(layoutInflater)
binding.btn.setOnClickListener {
binding.txt.text = "text changed!"
}
setContentView(binding.root)
}
}
'공부 > Android Studio' 카테고리의 다른 글
[Android Studio] Firebase와 연결하기 (0) | 2022.12.13 |
---|---|
[Android/Kotlin] Recycler view 사용법 (0) | 2022.12.08 |
[Android Studio] fragment 사용법 3 (bottom navigation) (0) | 2022.12.01 |
[Android Studio/Kotlin] fragment 사용법 2 (Action bar 뒤로가기) (0) | 2022.11.30 |
[Android Studio/Kotlin] fragment 사용법 1 (fragment 교체) (0) | 2022.11.20 |
댓글