2023.12.12(화) TIL

quinones·2023년 12월 12일

오늘은 안드로이드 앱 개발 입문 3-4주차 강의를 듣고 배운내용을 정리하려한다.

style

먼저 반복되는 내용의? TextView, 혹은 Button등의 위젯이 있을때 사용법이다.
Button을 예를 들어보면 하나의 프로젝트에서 같은 내용의 Button, 예를들면 android:layout_width=wrap content, android:layout_height = wrap_content, android:textColor = #FF0000, android:textSize = 15sp, android:typeface = monospace 이렇게 크기, 텍스트 색, 텍스트사이즈, 텍스트글꼴이 공통되는 부분이라고 해보자.
이렇게 공통되는 부분을 가진 Button 한 30개쯤 있다고 생각한다면 일일이 다 쓰는것도 문제다.
하지만 직접 다 썻다고 생각하고, 마지막에 실행시켜 확인해봤는데, 버튼 텍스트의 색이 맘에 안들어서 바꿔주려고 한다면 30개의 Button을 일일이 다 바꿔줘야한다.
이런 불편함을 없애기 위해 res/values/styles.xml파일에서 style설정을 해줄 수 있다.

<style name="myButton" parent="@android:style/TextAppearance.Medium">
	<item name="android:layout_width"> wrap_content </item>
	<item name="android:layout_height"> wrap_content </item>
	<item name="android:textColor">#FF0000 </item>
	<item name="android:typeface"> monospace </item>
	<item name="android:textSize"> 15sp </item>
</style>

이렇게 style설정을 할 수 있고 사용법은 간단하게 style="@style/(설정한 이름)" 이렇게 사용해주면된다.

<Button
	style="@style/myButton"
	android:layout_gravity="center"
	android:text="Button2"/>
<Button
	style="@style/myButton"
	android:layout_gravity="right"
	android:text="Button3"/>

이렇게 중복되는 값들에 대해 가독성이 좋아지게 코드를 짤 수 있다


Intent

  • 명시적 인텐트
    -> 특정한 컴포넌트를 직접적으로 호출할 때 사용되는 인텐트. 주로 앱 내부에서 다른 액티비티나 서비스를 시작할 때 사용된다.
    ex)
val signUpIntent = Intent(this, SignUpActivity::class.java)
startActivity(signUpIntent)

현재 액티비티에서 SignUpActivity로 이동하기 위해서는 위와 같이 사용해주면 된다. 해당 액티비티를 끝내기 위해서는 해당 액티비티에서 finish()하면 종료된다.

  • 암시적 인텐트
    -> 특정한 컴포넌트를 명시하지 않고, 수행하고자 하는 일반적인 작업을 인텐트 객체에 설명해서 startActivity()메소드에 넘겨준다. 이때 안드로이드 시스템은 이 인텐트를 처리할 수 있는 모든 어플리케이션을 검색하여 적합한 인텐트 필터를 가진 컴포넌트를 찾아서 실행시켜준다.

    여기서 인텐트 필터? - 어떤 인텐트를 수신할 준비가 되어있는지 나타내는 설정이다.
    ex)

val call_intent = Intent(Intent.ACTION_DIAL,Uri.parse("tel:114"))
startActivity(call_intent)
val map_intent = Intent(Intent.ACTION_VIEW,Uri.parse("geo:37.565350, 127.01445"))
startActivity(map_intent)

위는 전화걸기, 지정된 위치를 지도에 표시하기 두가지 인텐트 예시이다.

추가로, 인텐트 필터의 예를 들어보면 아래와 같이 인텐트필터를 manifests안에 해당 액티비티에 추가해주면, 이 앱을 다른앱에서 DIAL로 사용할 수 있게된다.

<intent-filter>
	<action android:name="android.intent.action.DIAL" />
	<category android:name="android.intent.category.DEFAULT" />
	<data android:scheme="tel" />
</intent-filter>

putExtra, getStringExtra

intent를 이용해서 화면을 전환할때, 어떠한 값을 같이 넘겨주고, 또는 받아주기도 가능하다. putExtra("키값", 넘겨줄값)을 이용해서 넘겨준다.
ex)

val intent = Intent(this, 클래스명:class.java)
val value = "넘겨줄값"
intent.putExtra("Key", value)
startActivity(intent)

이렇게하면 클래스명으로 이동을 하면서 value라는 string값을 함께 넘겨줄 수 있다. 해당 값을 이동하는 클래스에서 사용하려면

val value = intent.getStringExtra("Key")

이렇게 가져와주면 된다. 넘겨줄때 사용한 키값을 사용해서 받아올때 해당키값으로 받아와주는 것이다.

생명주기

액티비티의 생명주기에는
onCreate() : 액티비티가 처음 생성될 때 호출된다.
onStart(): 액티비티가 사용자에게 보여지기 시작할 때 호출됩니다.
onResume(): 액티비티가 포그라운드에 있고 사용자와 상호 작용 가능할 때 호출됩니다.
onPause(): 액티비티가 포그라운드에서 벗어나면서 다른 액티비티가 포그라운드로 올라올 때 호출됩니다.
onStop(): 액티비티가 더 이상 사용자에게 보여지지 않을 때 호출됩니다.
onDestroy(): 액티비티가 소멸될 때 호출됩니다.

만약에 firstActivity, secondActivity 두개의 액티비티가 존재하고, 버튼을 이용해서 서로의 액티비티를 이동할 수 있다고 생각하고 앱을 실행시킨다고 생각하면
firstActivity의 onCreate() - onStart() - onResume() 순서대로 일어난다.
다음 버튼을 눌러 secondActivity로 이동하였다면 onPause(),
secondActivity의 onCreate() - onStart() - onResume(), 그다음에 firstActivity의 onStop()이 일어나고, 만약 다시 firstActivity로 이동한다면 second에서 onPause(), first에서 onRestart() - onStrat() - onResume()이 일어나고 나왔던 second는 onStop() - onDestroy()순서대로 일어난다.


이렇게 배운 내용을 가지고 내일은 자기소개 앱 만들기 과제를 해볼 예정이다.
필수구현, 선택구현 모두 구현하고, 이쁘게 꾸미는것이 목표다!

profile
이우진

0개의 댓글