오늘은 앱개발 입문주차 강의를 마저 듣고 과제를 작성했다.
사용자와 상호작용할 수 있는 화면을 제공하는 애플리케이션의 구성요소이다.
전화걸기, 사진찍기, 이메일 보내기, 지도 보기 등이 이에 해당한다.
AndroidManifest.xml 파일 보면 application에 activity가 들어있는데, category를 LAUNCHER로 주면 앱이 실행되자마자 가장 먼저 실행되는 액티비티라는 것.
안드로이드 매니페스트의 역할
인텐트는 일종의 메시지 객체이다.
인텐트를 사용해 다른 앱 구성요소(액티비티, 서비스, 브로드캐스트리시버)로 작업을 요청할 수 있다.
startActivity, startService, sendBroadcast 등의 함수의 인자로 사용한다.
- 명시적, 암시적 인텐트 사용법
val intent = Intent(this, SecondActivity::class.java)
val intent = Intent(Intent.ACTION_DIAL, Uri.parse("tel:114"))
val intent = Intent(Intent.ACTION_VIEW, Uri.parse("geo:37.565350, 127.01445"))
(공통) startActivity(intent)
- 인텐트 필터로 암시적 인텐트 수신
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
- 인텐트간 데이터를 주고받는 방법
val intent = Intent(this, ThirdActivity::class.java)
intent.putExtra("dataFromFirstActivity", et.text.toString())
val data = intent.getStringExtra("dataFromFirstActivity")

위 그림과 같은 생명주기를 가진다.
다른 액티비티로 넘어갈 땐 일단 현재 액티비티를 퍼즈하고 다른 액티비티를 Create, Start, Resume까지 한 다음에 스탑한다.
해당 액티비티가 finish 하는 경우는 그 액티비티도 퍼즈하고 현재 액티비티가 Restart, Start, Resume 한 다음에 스탑하고 디스트로이 한다.
로그인 화면이 첫 화면이고, 회원가입 화면과 자기소개 화면까지 만들면 된다.
빈칸이 있는지 검증하고, 화면간 이동 및 데이터 전달의 구현이 목표다.
크게 어렵지는 않은 과제라서, 일단 Lv3까지는 오늘 작성했다.
만들면서 느꼈지만, UI 작업은 역시 스트레스다.. 물론 아직 요령이 없어서 그렇겠지만, 위젯을 배치하고 위치를 잡는 과정이 너무 더디다. 일일이 위치를 잡고 마진을 맞추고.. 그러다가 만약 길이가 안맞아서 마진을 변경해야 하면 parent에 대해 marginHorizontal로 32dp 준 값을 또 일일이 변경해야 한다. (근데 글 작성하다보니 그러면 style로 만들면 되지 않았나 하는 생각이 든다. 근데 에딧은 그렇다쳐도 텍뷰는 매치패런트하고 호라이즌탈 주면 가운데정렬이라서 따로 해야할건데.. 그럼 왼쪽에 맞추고 마진 주면 되긴 하겠구나. 마진값은 변수로 쓸 수 있나..?)
요령이 생길 때까지 얼마나 걸릴지 모르겠다.