안드로이드 앱(Kotlin|Java)/[2025~] 안드로이드 앱

Part1_Ch02_05 유저 입력값 받아오기

heylo 2025. 2. 3. 14:31

1) Activity

안드로이드 4대 요소 중 하나인 Activity

 

사용자가 앱과 상호작용하기 위한 진입점

 

 

화면이 있고 유저에게 입력값을 받을 수 있는 부분이 있고

입력받은 값을 보여주는 화면이 있다.

 

Activity 를 능숙하게 관리하고 싶을 때

반드시 알아야하는 것 중 하나가

Activity 의 Life cycle (수명주기) 이다.

 

상태변경에 이를 수 있는 방법이나

앱 간의 이동, 앱 간의 데이터 사이 관계도 알아야 한다.

 

이런 부분은 부록을 통해 학습 가능.


2) UI 요소 가져오고, 동작 처리 확인하기

2-1) 각 View 의 id 설정

@+id 를 사용하면 아이디를 추가한다는 의미이다.

id=”@+id/…”

숫자 텍스트뷰와, 초기화 버튼, +버튼에 id 를 주자.

<TextView
android:id="@+id/numberTextView"

...
<Button
            android:id="@+id/resetButton"
...
<Button
            android:id="@+id/plusButton"

2-2) UI 요소 가져오기 ( findViewByID )

findViewById<TextView>(R.id.numberTextView)

// UI 요소 가져오기
        val numberTextView = findViewById<TextView>(R.id.numberTextView)
        val resetButton = findViewById<Button>(R.id.resetButton)
        val plusButton = findViewById<Button>(R.id.plusButton)


2-3) 동작에 대한 연산처리 확인하기 ( Log.d )

        // 동작에 대한 연산 처리
        // 클릭에 대한 처리
        resetButton.setOnClickListener{
            // 리셋 버튼의 클릭에 대한 리스닝을 하고 있는지 확인하기 위해 Log 찍기
            Log.d("onClick", "리셋 버튼이 클릭되었습니다.") // 디버깅용이므로 Log.d
        }

        plusButton.setOnClickListener{
            // 리셋 버튼의 클릭에 대한 리스닝을 하고 있는지 확인하기 위해 Log 찍기
            Log.d("onClick", "+ 버튼이 클릭되었습니다.") // 만약 에러용이면 Log.e
        }

여러 가지 디버깅 수준으로 Log 를 찍을 수 있는데

그 중 Log.d 는 디버깅용이고

그 중 Log.e 는 에러용이다. ( 빨간글씨 )

 

Log 는 Android Studio 의

Logcat 에서 확인할 수 있다.


2-4) 전체 코드

MainActivity.kt

package com.part1.chapter2

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import android.widget.Button
import android.widget.TextView

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // UI 요소 가져오기
        val numberTextView = findViewById<TextView>(R.id.numberTextView)
        val resetButton = findViewById<Button>(R.id.resetButton)
        val plusButton = findViewById<Button>(R.id.plusButton)

        // 동작에 대한 연산 처리
        // 클릭에 대한 처리
        resetButton.setOnClickListener{
            // 리셋 버튼의 클릭에 대한 리스닝을 하고 있는지 확인하기 위해 Log 찍기
            Log.d("onClick", "리셋 버튼이 클릭되었습니다.") // 디버깅용이므로 Log.d
        }

        plusButton.setOnClickListener{
            // + 버튼의 클릭에 대한 리스닝을 하고 있는지 확인하기 위해 Log 찍기
            Log.d("onClick", "+ 버튼이 클릭되었습니다.") // 만약 에러용이면 Log.e
        }
    }

}

 

 

 

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"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/numberTextView"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:text="0"
        android:textSize="100dp"
        android:textColor="@color/blue"
        android:textStyle="bold|italic"
        android:gravity="center"/>

    <!-- Linear Layout 는 vertical 이다.
    그러나 버튼은 가로 정렬하고 싶다.
    이럴 때는, 중첩 레이아웃을 사용하면 된다. -->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <Button
            android:id="@+id/resetButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="초기화"
            android:layout_weight="1"
            android:layout_marginTop="16dp"
            android:layout_marginBottom="16dp"
            android:layout_marginStart="16dp"

            />

        <Button
            android:id="@+id/plusButton"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:text="+"
            android:layout_weight="1"
            android:layout_margin="16dp"
            />
    </LinearLayout>
</LinearLayout>