-
생 초보가 Android App 개발하는 일기 with kotlin - 3Android 2021. 1. 7. 16:23728x90
이번에는 5~6 Activiy랑 Event처리에 대해서 공부했습니다.
Activity
Activity는 app의 page개념으로 여러 activity가 있을 수 있으면 그중 Main Activity는 필수입니다.
보통 android의 Activiry class를 상속받아서 재정의하고 중요 함수를 overide해서 사용하게 됩니다.
위 그림이 Activity의 liftcyle인데 각 함수가 어떻게 동작하는지 정의하고 있습니다.
5강에선 각 함수별로 log를 찍어서 app상태가 어떻게 전이되는지 실습해봤습니다.
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Log.i("Lifecycle", "onCreate()") } override fun onStart() { super.onStart() Log.i("Lifecycle", "onStart()") } override fun onResume() { super.onResume() Log.i("Lifecycle", "onResume()") } override fun onPause() { super.onPause() Log.i("Lifecycle", "onPause()") } override fun onStop() { super.onStop() Log.i("Lifecycle", "onStop()") } override fun onRestart() { super.onRestart() Log.i("Lifecycle", "onRestart()") } override fun onDestroy() { super.onDestroy() Log.i("Lifecycle", "onDestroy()") } }
그리고 남은 시간에는 UI편집기로 layout UI 그리는 방법을 알려주네요.
Event
6장은 대망의 Event처리에 대한 강의입니다.
그런데 예제따라하다가 Activity에서 Layout객체에 접근하려니 에러가 나네요.
kotlinx.android.synthetic.main.activity_main가 없다는데 autoimport가 동작하지 않는 것 같습니다.
수동으로 입력해도 에러가 나길래 찾아보니 gradle설정에 아래 kotlin-extension을 추가하고 sync해주면 동작한다고 하네요.
plugins { id 'com.android.application' id 'kotlin-android' id 'kotlin-android-extensions' }
Android에서 Event를 처리하는 방법에는 총 4가지 방법이 있습니다.
아래에 하나씩 정리해보았습니다.
-
layout의 객체에 OnClick attribute에 사용자 정의한 function추가
-
activity에 사용자 정의 함수 생성
fun onButton(v: View) { textView.text = "눌렸습니다." textView.textSize = 50.toFloat() Toast.makeText( this, "눌렸습니다", Toast.LENGTH_SHORT).show() }
-
layout에 OnClick Event에 함수 등록
-
-
EventListerner 등록
-
Activity Class에 Event Listner interface 추가하고 함수를 구현 후 onCreate()에서 button객체에 listner등록
class MainActivity : AppCompatActivity(), View.OnClickListener override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener(this) } override fun onClick(p0: View?) { //TODO("Not yet implemented") textView.text = "또 눌렸습니다" textView.textSize = 50.toFloat() }
-
Event Handler 등록
-
View.OnClickListener를 상속받는 inner class로 event hendler구현. 이것도 onCreate에서 button객체에 등록 필요.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) val h: MyHandler = MyHandler() button.setOnClickListener(h) } inner class MyHandler : View.OnClickListener { override fun onClick(p0: View?) { textView.text = "또 다시 눌렸습니다" textView.textSize = 50.toFloat() } }
-
-
Lambda 구현
-
가장 깔끔한 구현 방법으로 이걸 추천.
-
onCreate() 함수에서 바로 lambda로 구현
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) button.setOnClickListener { textView.text = "눌렀습니다2" textView.textSize = 50.toFloat() } }
-
추가로 image파일을 받아서 background로 넣어주는 것도 설명해줍니다.
image를 app\src\main\res\drawable 경로에 넣어주고 activity_main.xml에서 background 속성을 추가해주면 됩니다.
주의할 점은 파일명에 띄어쓰기나 대시(-)가 있으면 안 된다고 합니다.<?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" android:background="@drawable/background" >
이제 뭔가 눌리면 동작하는 녀석을 만들었봤는데 역시 이런 게 재밌습니다.
Intent로 여러 Activity를 넘나들면서 동작하는 건 다음 강좌를 통해서 배울 수 있을 것 같네요.
'Android' 카테고리의 다른 글
생 초보가 Android App 개발하는 일기 with kotlin - 2 (0) 2021.01.06 생 초보가 Android App 개발하는 일기 with kotlin - 1 (0) 2021.01.04 -