[안드로이드] 뷰(View) - 액티비티와 XML

·2022년 5월 14일
0

Doit 안드로이드

목록 보기
1/12
post-thumbnail

뷰를 이용한 화면 구성

액티비티-뷰 구조

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로 화면 구성하기

<?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 - 화면 구성 / 액티비티 - 네트워킹, 데이터 핸들링, 사용자 이벤트 처리 등으로 분리하는 것이 좋다.

profile
SOOP

0개의 댓글