4가지 컴포넌트 (액티비티, 서비스, 브로드캐스트 리시버, 콘텐츠 프로바이더) 중 화면을 출력하는 컴포넌트는 액티비티 뿐이다
Q. 화면이 10개라면 액티비티도 10개 만들어야 하는가?
-> 프래그먼트를 사용하면 1개의 액티비티로 화면 10개를 만들 수 있다. 학습 초반이므로 1액티비티 1화면이라고 생각해두자.
액티비티는 화면을 출력하는 컴포넌트일 뿐, 그 자체가 화면은 아니다. 화면에 내용을 표시하기 위해서는 뷰(View) 클래스를 이용하자.
액티비티에서 화면을 구성하는 방법 2가지
1. 액티비티 코드로 작성 - 화면을 구성하는 뷰 클래스를 액티비티 코드에 직접 생성
2. 레이아웃 xml 파일로 작성
package com.example.test6
import android.graphics.Typeface
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.Gravity
import android.view.ViewGroup.LayoutParams.WRAP_CONTENT
import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView
import androidx.core.content.ContextCompat
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 이름 문자열 출력 TestView 생성
val name = TextView(this).apply{
typeface = Typeface.DEFAULT_BOLD
text = "Lake Louise"
}
// 이미지 출력 ImageView 생성
val image = ImageView(this).also {
it.setImageDrawable(ContextCompat.getDrawable(this, R.drawable.jin))
}
// 주소 문자열 출력 TextView 생성
val address = TextView(this).apply{
typeface = Typeface.DEFAULT_BOLD
text = "Lake Louise, AB, 캐나다"
}
val layout = LinearLayout(this).apply {
orientation = LinearLayout.VERTICAL
gravity = Gravity.CENTER
//LinearLayout 객체에 TextView, ImageView, TextView 객체 추가
addView(name, WRAP_CONTENT, WRAP_CONTENT)
addView(image, WRAP_CONTENT, WRAP_CONTENT)
addView(address, WRAP_CONTENT, WRAP_CONTENT)
}
// LinearLayout 객체를 화면에 출력
setContentView(R.layout.activity_main)
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
android:gravity="center">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="Lake Louise"
/>
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/jin"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textStyle="bold"
android:text="Lake Louise, AB, 캐나다"
/>
</LinearLayout>
Q. 액티비티 코드 vs XML 파일?
효율성을 고려한다면 XML 파일
XML - 화면 구성 / 액티비티 - 네트워킹, 데이터 핸들링, 사용자 이벤트 처리 등으로 분리하는 것이 좋다.