증상
뷰가 선택이 안됨. 예전과 같은 방식으로는
해결
1. 프로젝트명/app/build.gradle 에 다음 코드 추가.
android{
...(다른 코드들)
buildFeatures {
viewBinding true
}
}
아래 : 레이아웃 파일
activity_main.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/tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="사랑해"
android:textColor="#E87878"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tv_sub"
android:layout_width="115dp"
android:layout_height="85dp"
android:text="이건 보이냐?"
android:textColor="#BEF376"
android:textSize="20sp"
tools:layout_editor_absoluteX="159dp"
tools:layout_editor_absoluteY="85dp" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
android:onClick="funTest"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
tools:layout_editor_absoluteY="280dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
2. binding을 통해 xml(레이아웃) 파일의 View 들(TextView,Button 등) 을 조작할 Activity 파일에 다음 코드 입력
private lateinit var binding: ActivityMainBinding
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
최종 형태 아래 : 액티비티 파일
MainActivity.kt
package com.example.myapplication
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.example.myapplication.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
// binding.tv.text = "가즈아"
// binding.btnTest.text="보여?"
}
var state = true
fun funTest(view: View) {
state = !state
if (state) {
binding.tv.text = "true"
binding.tvSub.text ="해냈다"
} else {
binding.tv.text = "false"
binding.tvSub.text ="요롤레이 요호호"
}
}
}
View Binding 을 통해야지만 이제는 이를 통해 TextView, Button 등과 같은 대상들을 id 값으로 참조(선택)할 수 있다.
binding.(view들의 id값 카멜표기법).(텍스트를 조작한다면 text 등)
예시
binding.tv.text ="hello~"
여기서 카멜 표기법이란
레이아웃 파일에서 id 값을 tv_sub 이런 식으로 주었을때
tvSub 으로 선택할 수 있게 됨을 말한다.
카멜이란 낙타라는 의미로 변수명중 의미가 구분되는 단어의 첫 글자를 대문자로 표기해주는 코딩 작성 규칙을 의미한다.(가독성의 이유)
binding 이라는 변수에 담아준뒤 이제 아이디값(카멜표기법으로 자동변환)으로 참조해주면 텍스트값을 변화시켜줄 수 있다.
좋은 참고 블로그
https://white-hacker.tistory.com/entry/Android-%EB%B7%B0-%EB%B0%94%EC%9D%B8%EB%94%A9-View-Binding
[Android] 뷰 바인딩 (View Binding)
뷰 바인딩이란? 말그대로 묶는건데, 레이아웃 xml 파일에 대한 액티비티 클래스를 정의 해줄 필요없이 자동으로 각 뷰에 대해 이어서(connect) 생성해주는 기능을 말한다. 뷰바인딩을 사용해야 하
white-hacker.tistory.com
*최고는 역시 공식문서!! 참고하세요
https://developer.android.com/topic/libraries/view-binding?hl=ko#kotlin
뷰 결합 | Android 개발자 | Android Developers
뷰 결합 뷰 결합 기능을 사용하면 뷰와 상호작용하는 코드를 쉽게 작성할 수 있습니다. 모듈에서 사용 설정된 뷰 결합은 모듈에 있는 각 XML 레이아웃 파일의 결합 클래스를 생성합니다. 바인딩
developer.android.com
'Android(Kotlin)' 카테고리의 다른 글
[Kotlin][Android] 버튼 클릭시 이벤트 리스너 (0) | 2022.02.21 |
---|---|
[Kotlin][Android] 토스트 메세지 띄우기 (0) | 2022.02.21 |
[Android Studio][Kotlin] - 화면간 이동을 가능하게 하는 Intent (0) | 2022.02.21 |
[Kotlin] var, val 차이 (0) | 2022.02.21 |
[Kotlin][Android Studio]Error running 'MainActivityKt': Top-level function 'main()' not found in package 'com.example.myapplication' (0) | 2022.02.21 |