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();
}
'개발 공부 > 안드로이드 스튜디오(코틀린)' 카테고리의 다른 글
안드로이드 스튜디오(문자열 배열, 게시판에 게시글 추가/삭제) (0) | 2023.10.18 |
---|---|
안드로이드 스튜디오(새로운 프로젝트 만들기, ViewBinding 사용법) (0) | 2023.10.18 |
안드로이드 스튜디오(로그인페이지/이동) (0) | 2023.10.18 |
안드로이드 스튜디오(나이분류, 두 수 더하기, 이미지버튼) (0) | 2023.10.17 |
안드로이드 스튜디오 사용! (1) | 2023.10.17 |