πŸ“± [ App/Java ] Android App 개발 κ°œλ… 정리

Dongmin KimΒ·2021λ…„ 8μ›” 18일
0

πŸ“±App

λͺ©λ‘ 보기
1/2
post-thumbnail

πŸ“Œ Activity

  • ν˜„μž¬ λ³΄μ΄λŠ” 화면을 κ΄€λ¦¬ν•˜λŠ” μ‹€ν–‰ λ‹¨μœ„
  • μ–΄ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μ‹€ν–‰ν•˜λ©΄ Activity κ°€ μ‹€ν–‰λ˜κ³  Activity κ°€ κ΄€λ¦¬ν•˜λŠ” 화면이 λ‚˜νƒ€λ‚˜κ²Œ λœλ‹€.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.helloworld">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Helloworld">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
  • icon 은 μ•±μ˜ μ•„μ΄μ½˜
  • label 은 μ•„μ΄μ½˜ ν•˜λ‹¨μ˜ 문자
  • activity λŠ” ν•˜λ‚˜μ˜ ν™”λ©΄ λ‹Ή ν•˜λ‚˜μ”©

    μ•„μ΄μ½˜μ„ ν„°μΉ˜ν•˜κ²Œ 되면 μˆ˜λ§Žμ€ activity μ€‘μ—μ„œ intent-filter 에 android.intent.action.MAIN 이 μ„ΈνŒ…μ΄ λ˜μ–΄μžˆλŠ” activity λ₯Ό μ°Ύκ³ , κ·Έ activity 에 κΈ°λ‘λ˜μžˆλŠ” name 속성값을 μ½μ–΄μ˜€κ²Œ λœλ‹€. 그리고 이 속성값과 μΌμΉ˜ν•˜λŠ” μ΄λ¦„μ˜ class λ₯Ό μ°Ύμ•„μ„œ 객체λ₯Ό μƒμ„±ν•˜κ³  onCreate λ©”μ†Œλ“œλ₯Ό μžλ™μœΌλ‘œ ν˜ΈμΆœν•œλ‹€.

MainActivity.java

package com.example.helloworld;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;

public class MainActivity extends AppCompatActivity {

    @Override
    // Activity κ°€ 생성될 λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλœλ‹€.
    // ν™”λ©΄ νšŒμ „μ΄ λ°œμƒν–ˆμ„ λ•Œ μžλ™μœΌλ‘œ ν˜ΈμΆœλœλ‹€.
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        System.out.println("onCreate λ©”μ„œλ“œ 호좜");
        Log.d("test", "onCreate 호좜"); // 필터링할 λ•ŒλŠ” Log.d λ₯Ό μ‚¬μš©ν•˜λ©΄ λœλ‹€.
    }

    @Override
    // onCreate λ©”μ†Œλ“œ 호좜 이후에 μžλ™μœΌλ‘œ ν˜ΈμΆœλœλ‹€.
    // Activity κ°€ 정지 μƒνƒœκ°€ λ˜μ—ˆλ‹€κ°€ ν™œλ™μƒνƒœλ‘œ λŒμ•„μ˜¬ λ•Œ ν˜ΈμΆœλœλ‹€.
    protected void onStart() {
        super.onStart();

        Log.d("test", "onStart 호좜");

    }

    @Override
    // onStart λ©”μ„œλ“œκ°€ 호좜된 이후에 μžλ™μœΌλ‘œ ν˜ΈμΆœλœλ‹€.
    // Activity κ°€ μΌμ‹œ 정지 λ˜μ—ˆλ‹€κ°€ λ‹€μ‹œ λŒμ•„μ˜¬ λ•Œ ν˜ΈμΆœλœλ‹€.
    protected void onResume() {
        super.onResume();

        Log.d("test", "OnResume 호좜");
    }

    @Override
    // Activity κ°€ 정지 μƒνƒœκ°€ λ˜μ—ˆλ‹€κ°€ ν™œλ™ μƒνƒœλ‘œ λŒμ•„κ°ˆ λ•Œ onStart λ©”μ„œλ“œ 전에 ν˜ΈμΆœλœλ‹€.
    protected void onRestart() {
        super.onRestart();

        Log.d("test", "onRestart 호좜");
    }

    @Override
    // Activity κ°€ μΌμ‹œμ •μ§€ μƒνƒœκ°€ 될 λ•Œ ν˜ΈμΆœλœλ‹€.
    // ν™”λ©΄μƒμ—μ„œ μ™„μ „νžˆ μ‚¬λΌμ§€κ±°λ‚˜ ν˜„μž¬ ν™”λ©΄ μœ„μ— μž‘μ€ νŒμ—… μ°½ 같은 것이 λ‚˜νƒ€λ‚  λ•Œ 호좜
    protected void onPause() {
        super.onPause();

        Log.d("test", "onPause 호좜");
    }

    @Override
    // Activity κ°€ ν™”λ©΄μ—μ„œ μ‚¬λΌμ§ˆ λ•Œ ν˜ΈμΆœλœλ‹€.
    protected void onStop() {
        super.onStop();

        Log.d("test", "onStop 호좜");
    }

    @Override
    // ν˜„μž¬ Activity 의 μˆ˜ν–‰μ΄ μ™„μ „νžˆ μ’…λ£Œλ˜μ–΄ λ©”λͺ¨λ¦¬μƒμ—μ„œ 제거될 λ•Œ ν˜ΈμΆœλœλ‹€.
    protected void onDestroy() {
        super.onDestroy();

        Log.d("test", "onDestroy 호좜");
    }
}
  • res 폴더에 νŒŒμΌλ“€μ„ μ‰½κ²Œ κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ (R.layout.activity_main) 을 μ‚¬μš©ν•¨.
    R은 res 폴더 , layout 은 layout폴더 , activity_main.xml 을 κ°€λ₯΄μΌœμ„œ 화면을 μ§€μ •ν•˜λŠ” 것이닀.
  • μ•ˆλ“œλ‘œμ΄λ“œλŠ” R.layout.activity_main κ³Ό 같은 것을 λ¦¬μ†ŒμŠ€ 아이디라고 ν•œλ‹€.

Activity 생λͺ…μ£ΌκΈ°

πŸ“Œ View

  • μ•ˆλ“œλ‘œμ΄λ“œμ—μ„œ λˆˆμ— λ³΄μ΄λŠ” λͺ¨λ“  μš”μ†Œλ₯Ό View 라고 λΆ€λ₯΄λ©° κ°œλ°œμžκ°€ λ°°μΉ˜ν•œ λͺ¨λ“  View 듀은 Class둜 μ œκ³΅λ˜λŠ”λ° View λΌλŠ” Class λ₯Ό 상속받고 μžˆλ‹€.
  • View ν΄λž˜μŠ€λŠ” λͺ¨λ“  UI μš”μ†Œλ“€μ˜ λΆ€λͺ¨ν΄λž˜μŠ€λ‘œμ¨ μœ„μ ―κ³Ό λ ˆμ΄μ•„μ›ƒμœΌλ‘œ λ‚˜λ‰œλ‹€.

λ ˆμ΄μ•„μ›ƒ

  • μ»¨ν…Œμ΄λ„ˆ, λ·° 그룹이라고 λΆ€λ₯΄κΈ°λ„ ν•˜λ©° λ‹€λ₯Έ 뷰듀을 ν¬ν•¨ν•˜κ³  ( μ»¨ν…Œμ΄λ„ˆ ) λ‚΄λΆ€μ˜ λ·°λ₯Ό 톡합 κ΄€λ¦¬ν•˜κ³  ( λ·° κ·Έλ£Ή ) λ‚΄λΆ€μ˜ 뷰듀이 λ°°μΉ˜λ˜λŠ” λͺ¨μ–‘을 κ²°μ • ( λ ˆμ΄μ•„μ›ƒ ) ν•œλ‹€.
  • μ•ˆλ“œλ‘œμ΄λ“œλŠ” 단말기 μ•‘μ • μ‚¬μ΄μ¦ˆμ™€ 해상도가 μ—¬λŸ¬ μ’…λ₯˜κ°€ μžˆμ–΄ λ·°κ°€ 배치될 μœ„μΉ˜λ₯Ό κ²°μ •ν•˜μ§€ μ•Šκ³  배치될 ν˜•νƒœλ₯Ό κ²°μ •ν•˜κ²Œ λœλ‹€.
  • κ°œλ°œμžκ°€ 배치될 ν˜•νƒœλ₯Ό κ²°μ •ν•˜κ²Œ 되면 μ•ˆλ“œλ‘œμ΄λ“œ OS μŠ€μŠ€λ‘œκ°€ 단말기에 μ΅œμ ν™”λœ μ‚¬μ΄μ¦ˆμ™€ μœ„μΉ˜λ₯Ό κ²°μ •ν•˜μ—¬ λ·°λ₯Ό λ°°μΉ˜ν•œλ‹€.

μœ„μ ―

  • λ¬Έμžμ—΄ μž…λ ₯, λ¬Έμžμ—΄ 좜λ ₯ λ“± μ–΄λ–€ κΈ°λŠ₯을 가지고 있고 μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©μ„ ν•˜λŠ” 뷰듀을 ν†΅μΉ­ν•΄μ„œ μœ„μ ―μ΄λΌκ³  λΆ€λ₯Έλ‹€.

ν™”λ©΄ λ§Œλ“€κΈ°

  • μ•ˆλ“œλ‘œμ΄λ“œλŠ” 화면에 λ ˆμ΄μ•„μ›ƒμ„ λ°°μΉ˜ν•˜κ³  κ·Έ μ•ˆμ— λ‹€λ₯Έ λ ˆμ΄μ•„μ›ƒμ΄λ‚˜ μœ„μ ―μ„ λ°°μΉ˜ν•˜μ—¬ ν™”λ©΄μ˜ λͺ¨μ–‘을 λ§Œλ“ λ‹€
  • μ΄λ ‡κ²Œ λ§Œλ“€μ–΄μ§„ 화면은 λͺ¨λ‘ 객체둜 λ§Œλ“€μ–΄μ§€λ©° κ°œλ°œμžλŠ”μ΄ 객체듀을 μ΄μš©ν•΄ μ½”λ“œμ—μ„œ ν•„μš”ν•œ μž‘μ—…μ„ ν•  수 μžˆλ‹€.
  • Activity_main.xml κΈ°λ³Έκ°’

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

  </LinearLayout>

View μ£Όμš” 속성

  • id : xml μ΄λ‚˜ μ½”λ“œμ—μ„œ λ·°λ₯Ό μ§€μΉ­ν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•˜λŠ” 속성이닀.
  • layout_width, height : 뷰의 κ°€λ‘œ 길이, μ„Έλ‘œ 길이
  • margin : 뷰의 μ™ΈλΆ€ μ—¬λ°±
  • padding : 뷰의 λ‚΄λΆ€ μ—¬λ°±
  • layout_gravity : 뷰의 μœ„μΉ˜ μ •λ ¬
  • gravity : λ·° λ‚΄λΆ€μ˜ μ •λ ¬
  • background : 뷰의 λ°°κ²½ 지정

0개의 λŒ“κΈ€