app > bulid.gradle
findViewById를 사용하지 않고 XML의 view component에 접근하는 object를 반환받아 view에 접근할 수 있는 방식
정리
buildFeatures{
viewBinding true
}
activity_main.xml > Design
위 사진처럼 각 위치는 이동만하는게 아니라 파란선으로 기준과 이어주고, 그 기준으로 부터 얼마나 떨어져있는지를 표시 해주어야 원하는 위치에 위치할 수 있다.
MainActivity.kt
방법1 - binding을 사용해 객체화 시키고 바로접근
val binding by lazy{ ActivityMainBinding.inflate(layoutInflater) }
// binding을 사용해서 객체화를 시키고 바로접근 가능
override fun onCreate(savedInstanceState: Bundle?) {
// activity가 만들어질 때 딱 한번만 실행된다.
// 따라서activity를 만들 때 단 한번만 하면 되는 작업들은 여기에서 해준다.
super.onCreate(savedInstanceState)
// 상위 클래스의 onCreate메소드를 먼저 실행하고 override된 메소드를 실행한다
// setContentView(R.layout.activity_main)
// activity_main.xml 파일로 만든 레이아웃이 출력이 된다
// 위 설명과 같이 레이아웃 출력
setContentView(binding.root)
// id가 btnSay인걸 클릭했을때 실행되는 이벤트
binding.btnSay.setOnClickListener {
//로그출력 및 프린트출력
Log.i(ContentValues.TAG, "btnSay 클릭했습니다")
println("btnSay를 클릭했습니다")
id가 textSay인곳의 text를 "Hello Android!!"로 변경
binding.textSay.setText("Hello Android!!")
}
}
방법2 - binding사용 x
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// R.id.abc = idrk abc인 곳에 접근한다
val textSay = findViewById<TextView>(R.id.textSay)
val btnSay = findViewById<Button>(R.id.btnSay)
//btnSay라는 id를 가진 layout을 클릭시 textSay문구를 "Android World"로 변경
btnSay.setOnClickListener {
textSay.text = "Android World"
// Toast
val toast = Toast.makeText(
this.applicationContext, "버튼클릭!", Toast.LENGTH_SHORT
)
toast.show() // .show() -> 이거 안하면 toast가 안보임
//Builder를 하는곳이 메인 액티비티에 있다.
AlertDialog.Builder(this@MainActivity).setTitle("welcome") // 제목
.setMessage("어서 오세요!!") // 메세지
.setCancelable(false) // 화면밖터치시(ture=꺼짐 / false=안꺼짐)
// {dialog, whitch->} 닫기 버튼을 클릭시 이벤트
.setNeutralButton("닫기", DialogInterface.OnClickListener{dialog, whitch->
}).show()
}
// onCreate가 최초 실행될때 로그 출력
Log.i(ContentValues.TAG, "onCreate 실행")
}
이처럼 버튼을 클릭했을때, 해당 버튼의 id값과 문구의 id값을 가져와 문구나 알림창을 변경하거나 띄울 수 있다.