본문 바로가기
개발 공부/안드로이드 스튜디오(코틀린)

안드로이드 스튜디오(시작/끝으로 이동, 홈화면/색바꾸기)

by momo'sdad 2023. 10. 18.

1. 시작/ 끝으로 이동하기

- 시작화면과 끝화면을 동작 시킬 Finish와 Start Activity를 만들어준다.

  • 시작화면 화면구성
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".StartActivity">

    <EditText
        android:id="@+id/etMenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:hint="메뉴를 입력해주세요"
        android:textSize="32sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnEnd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="끝으로 이동"
        app:layout_constraintEnd_toEndOf="@+id/etMenu"
        app:layout_constraintStart_toStartOf="@+id/etMenu"
        app:layout_constraintTop_toBottomOf="@+id/etMenu" />
</androidx.constraintlayout.widget.ConstraintLayout>
  • 끝화면 화면구성
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".FinishActivity">

    <TextView
        android:id="@+id/tvEnd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="여기는 끝입니다"
        android:textSize="32sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnStart"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="시작으로 이동"
        app:layout_constraintEnd_toEndOf="@+id/tvEnd"
        app:layout_constraintStart_toStartOf="@+id/tvEnd"
        app:layout_constraintTop_toBottomOf="@+id/tvEnd" />
</androidx.constraintlayout.widget.ConstraintLayout>
 

시작화면 / 끝화면

 
  • Start화면의 ID: - etMenu: 메뉴 입력창

- btnEnd: 메뉴를 입력한뒤 끝화면으로 이동하는 버튼

  • Finish화면의 ID: - tvEnd: Start화면의 입력 받은 메뉴를 출력하는 TextView

- btnStart: 시작화면으로 이동하는 버튼

: AndroidMainifest.xml 창에서 첫화면을 설정해주어야 한다(이전 내용에 표기)

  • StartActivity
package com.example.ex2209262;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.EditText;

import com.example.ex2209262.FinishActivity;

public class StartActivity extends AppCompatActivity {

    // 전역 변수 부분(field)
    Button btnEnd;
    EditText etMenu;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_start);

        // ID를 부여한 모든 View(Component)를 초기화
        btnEnd = findViewById(R.id.btnEnd);
        etMenu = findViewById(R.id.etMenu);

        btnEnd.setOnClickListener(view -> {
              String menu = etMenu.getText().toString();
            Intent intent = new Intent(StartActivity.this, FinishActivity.class);

            intent.putExtra("menu", menu);
            startActivity(intent);
        });
    }
}

초기화란?? (initialize)

int num; 변수의 선언

num = 5; 변수의 할당 (최초의 할당 : 초기화)

num = 7; 변수의 재할당

-> 변수를 선언 할때 함수의 앞부분에 먼저 선언한 후 쓸 함수안이나 앞에서 초기화 또는 재할당한다.

변수들은 묶어서 선언하는게 좋다.

ex)

※ Activity -> Activity로 이동: Intent 객체 사용

- Intent 사용법은 2가지

· 명시적 사용법

· 묵시적 사용법

시작화면에서 끝화면으로 입력된 내용을 보내기 위해서는

: 1) etMenu(입력창)를 초기화

- etMenu = findViewById(R.id.etMenu);

2) "끝으로 이동"버튼(btnEnd) 눌렀을 때,

- btnEnd.setOnClickListener(view -> {})

3) etMenu에 있는 문자열을 가져와서 String menu에 저장!

- String menu = etMenu.gtText().toString();

4) 문자열로 저장된 menu(String menu)를 Finish화면으로 보내기!(StartActivity에서 -> FinishActivity로)

- Intent intent = new Intent(StartActivity.this, FinishActivity.class);

5) name:"menu"라는 이름에 위의 문자열 menu(String menu)를 저장해서 보냄

- intent.putExtra(name:"menu", menu);

startActivity(intent); // 현재 보여지는 Activity를 종료

  • FinishActivity
package com.example.ex2209262;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;

public class FinishActivity extends AppCompatActivity {

    Button btnStart;
    TextView tvEnd;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_finish);

        btnStart = findViewById(R.id.btnStart);
        tvEnd = findViewById(R.id.tvEnd);

        String menu = getIntent().getStringExtra("menu");
        tvEnd.setText(menu);

        btnStart.setOnClickListener(view -> {

            //Intent intent = new Intent(StartActivity.this, FinishActivity.class);
            //startActivity(intent);
            // 현재 보여지는 Activity를 종료
            finish();
        });
    }
}

1) 시작화면의 입력된 name:"menu"를 intent에서 꺼내서 menu에 저장->tvEnd의 TextView에 출력

- String menu = getIntent().getStringExtra("menu");

- tvEnd.setText(menu);

2) 시작화면으로 이동버튼(btnStart)를 누르면 시작화면으로 이동

- btnStart.setOnClickListener(view -> {})

"""Intent intent = new Intent(StartActivity.this, FinishActivity.class);

startActivity(intent);""" // 생략가능

-> 현재 보여지는 Activity를 종료

finish();

2. 홈화면/색바꾸기

  • 홈화면 화면구성
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/cl"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".HomeActivity">

    <Button
        android:id="@+id/btnColor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="색상선택"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/etID"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="64dp"
        android:ems="10"
        android:hint="ID를 입력하세요"
        android:inputType="textPersonName"
        android:textAlignment="center"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/etPW"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:ems="10"
        android:hint="PassWord를 입력하세요"
        android:inputType="textPersonName"
        android:textAlignment="center"
        app:layout_constraintEnd_toEndOf="@+id/etID"
        app:layout_constraintStart_toStartOf="@+id/etID"
        app:layout_constraintTop_toBottomOf="@+id/etID" />

    <Button
        android:id="@+id/btnLogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="로그인"
        android:textSize="18sp"
        app:layout_constraintEnd_toEndOf="@+id/etPW"
        app:layout_constraintStart_toStartOf="@+id/etPW"
        app:layout_constraintTop_toBottomOf="@+id/etPW" />
</androidx.constraintlayout.widget.ConstraintLayout>
  • 색바꾸기화면 화면구성
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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=".ColorActivity">

    <EditText
        android:id="@+id/etColor"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:ems="10"
        android:hint="색깔을 입력해주세요"
        android:inputType="textPersonName"
        android:textAlignment="center"
        android:textSize="24sp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btnHome"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="32dp"
        android:text="홈으로 이동"
        app:layout_constraintEnd_toEndOf="@+id/etColor"
        app:layout_constraintStart_toStartOf="@+id/etColor"
        app:layout_constraintTop_toBottomOf="@+id/etColor" />
</androidx.constraintlayout.widget.ConstraintLayout>
 

홈화면 / 색상선택화면

 
  • Home화면의 ID: - btnColor: 색상선택화면으로 이동 버튼
  • Color화면의 ID: - etColor: 색상입력하는 TextView

- btnHome: 홈화면으로 이동하는 버튼

  • HomeActivity
package com.example.ex2209262;

import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;

import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class HomeActivity extends AppCompatActivity {
    Button btnColor;
    final int COLOR = 5793;
    ConstraintLayout cl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);


        btnColor = findViewById(R.id.btnColor);
        cl = findViewById((R.id.cl));

        String color = "yellow";
        cl.setBackgroundColor(Color.parseColor(color));

        btnColor.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent = new Intent(HomeActivity.this, ColorActivity.class);
                startActivityForResult(intent, COLOR);
                // HomeActivity를 첫화면으로 설정(AndroidMainfest.xml)
            }
        });
    }
    // onCreate() 끝


    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // 이 메소드가 호출되는 시점!!
        // 다른 액티비티를 갔다가 원래 액티비티로 돌아왔을때 호출됨!!
        if (requestCode == COLOR){
            if (resultCode == RESULT_OK){
                String color = data.getStringExtra("color");
                cl.setBackgroundColor(Color.parseColor(color));
            }
        }
    }
}
  • ConstraintLayout cl; -> 가장 맨 바깥쪽 Layout

- btnHome: 홈화면으로 이동하는 버튼

 

  • color 문자열에 " " 대입: " "-> rgb 혹은 지정된 색상

- String color = "yellow";

// String to Color 타입으로 변환

// Color.parseColor()

- cl.setBackgroundColor(Color.parseColor(color));

1) 색상선택 버튼(btnColor)을 눌렀을때

- btnColor.setOnClickListener(new View.OnClickListener() {})

2) COLOR를 intent에 받아옴(COLOR는 상수여야 하므로 변수선언시 상수로 초기화 시켜야함.)

ex)final int COLOR = 5793;

- Intent intent = new Intent(HomeActivity.this, ColorActivity.class);

startActivityForResult(intent, COLOR);

3) rerequestCode가 COLOR이면 resultCode를 받아와서 resultCode가 RESULT_OK이면 배경색을 바꾼다.

- if (requestCode == COLOR){

if (resultCode == RESULT_OK){

// intent에서 "color" 키 값을 통해 data 꺼내서

// 배경색깔을 지정!

String color = data.getStringExtra("color");

cl.setBackgroundColor(Color.parseColor(color));

}

※ 부모클래스에서 만들어진 기능을 재정의 : Method Overrinding

Android에서 오버라이딩 단축키 : Ctrl + o

다른 액티비티를 갔다가 원래 액티비티로 돌아올 때,

호출되는 메소드 중에서 intent값을 꺼낼 수 있는

onActivityReault() 메소드를 오버라이닝하자

  • ColorActivity
package com.example.ex2209262;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class ColorActivity extends AppCompatActivity {

    Button btnHome;
    EditText etColor;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_color);

        // 각 View 초기화
        btnHome = findViewById(R.id.btnHome);
        etColor = findViewById(R.id.etColor);

        btnHome.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String color = etColor.getText().toString();

                Intent intent = new Intent();
                intent.putExtra("color", color);
                setResult(RESULT_OK, intent);
                finish();
            }
        });
    }
}

1) btnHome버튼 눌렀을 때,

- btnHome.setOnClickListener(new View.OnClickListener() {})

2) etColor에서 문자열을 가져와서 String color에 대입!

- String color = etColor.getText().toString();

3) Color Activity -> Home Activity로 data 전송 위해

// Intent 객체 생성!

Intent intent = new Intent();

intent.putExtra("color", color);

setResult(RESULT_OK, intent);

finish();

}

반응형