Event Listener
- 특정 이벤트를 처리하는 인터페이스
- 여러 View에 의해 공유될 수 있으므로 해당 View가 누구인지 전달
Listener | Call Back Method | 설명 |
View.OnClickListener | onClick() | 사용자가 어떤 항목을 터치 했을 때 호출 |
View.OnLongClickListener | onLongClick() | 사용자가 항목을 터치하여 일정시간동안 그대로 누르고 있으면 발생 |
View.OnFocusChangeListener | onFocusChange() | 사용자가 하나의 항목에서 다른 항목으로 포커스를 이동할 때 호출 |
View.OnKeyListener | onKey() | 포커스를 가지고 있는 항목 위에서 키를 눌렀다가 놓았을 때 호출 |
Event 처리 방식
- XML로 Event Method 연결
- Listener Interface를 Activity Class에 구현
- Listener Class를 익명 Class로 정의
익명Class
- 클래스 몸체는 정의되지만 이름이 없는 클래스
- 클래스를 정의하면서 동시에 객체를 생성
- 이름이 없기 때문에 한 번만 사용 가능
계산기 만들기
- XML로 Event Method 연결하는 방법
.java파일에 코드를 작성할 예정이기 때문에 텍스트박스, 버튼에 id값을 설정 해 주자
프로세스는 이 순서로 진행할 예정이다.
1. ID값을 저장할 객체 이름 선언
2. 아이디 정보값 가져오기
3. 두개의 입력된 숫자값 가져오기
4. 버튼 클릭시 해당하는 연산 진행하게 하기
1. 버튼과 텍스트박스들은 하단 메소드에서도 사용할 것이기 때문에 onCreate 밖에 전역변수를 선언 해 준다.
Button btn_plus, btn_sub, btn_mul, btn_div;
TextView txt_result ;
EditText txt_num1, txt_num2;
2. 사용할 ID 정보값 가져와서 변수에 담아주기
txt_result = findViewById(R.id.txt_result);
btn_plus = findViewById(R.id.btn_plus);
btn_sub = findViewById(R.id.btn_sub);
btn_mul = findViewById(R.id.btn_mul);
btn_div = findViewById(R.id.btn_div);
txt_num1 = findViewById(R.id.txt_num1);
txt_num2 = findViewById(R.id.txt_num2);
3. Method 만들어주기
> 각각 plus sub mul div로 만들어 줬다.
plus만 간단히 코드 설명 해 보자면
계산을 위해 n1, n2, result를 따로 만들어 줬다.
n1, n2는 int형 이기 때문에 int로 형변환이 필요한데 Integer.parseInt는 String 형태에만 사용이 가능하므로
TextView타입인 num1 과 num2를 String형태로 변환시켜주자
a. '.toString'을 사용해서 String 형태로 변환시켜주기
= String num1 = txt_num1.getText().toString();
b. 문자열을 더해주면 String으로 변환되는 방법 이용하기 (int형으로 형변환까지 같이 시켜줬다)
= int n2 = Integer.parseInt(txt_num2.getText()+"");
TextView형태로 다시 되돌려 주기 위해서 String.valueOf를 이용해서 txt_result에 result 값을 담아줬다.
public void plus(View view) {
String num1 = txt_num1.getText().toString();
int n1 = Integer.parseInt(num1);
int n2 = Integer.parseInt(txt_num2.getText()+"");
int result = n1+n2;
txt_result.setText(String.valueOf(result));
}
코드전문
public class MainActivity4 extends AppCompatActivity {
Button btn_plus, btn_sub, btn_mul, btn_div;
TextView txt_result ;
EditText txt_num1, txt_num2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
txt_result = findViewById(R.id.txt_result);
btn_plus = findViewById(R.id.btn_plus);
btn_sub = findViewById(R.id.btn_sub);
btn_mul = findViewById(R.id.btn_mul);
btn_div = findViewById(R.id.btn_div);
txt_num1 = findViewById(R.id.txt_num1);
txt_num2 = findViewById(R.id.txt_num2);
}
public void plus(View view) {
String num1 = txt_num1.getText().toString();
//String num2 = txt_num2.getText().toString();
int n1 = Integer.parseInt(num1);
int n2 = Integer.parseInt(txt_num2.getText()+"");
int result = n1+n2;
txt_result.setText(String.valueOf(result));
}
public void sub(View view) {
int n1 = Integer.parseInt(txt_num1.getText()+"");
int n2 = Integer.parseInt(txt_num2.getText()+"");
int result;
if (n1 > n2) {
result = n1 - n2;
txt_result.setText(String.valueOf(result));
} else {
result = n2 - n1;
txt_result.setText(String.valueOf(result));
}
}
public void mul(View view) {
int n1 = Integer.parseInt(txt_num1.getText()+"");
int n2 = Integer.parseInt(txt_num2.getText()+"");
int result;
result = n1 * n2;
txt_result.setText(String.valueOf(result));
}
public void div(View view) {
int n1 = Integer.parseInt(txt_num1.getText()+"");
int n2 = Integer.parseInt(txt_num2.getText()+"");
int result;
if (n1 > n2) {
result = n1 / n2;
txt_result.setText(String.valueOf(result));
} else {
result = n2 / n1;
txt_result.setText(String.valueOf(result));
}
}
}
배경색 바꾸기 1
- XML로 Event Method 연결하는 방법
코드설명은 생략하겠다.
backgroundcolor를 변경하는 방법은
1. layout.setBackgroundColor(Color.parseColor("#afe3ff")); (코드 색상표 이용)
2. layout.setBackgroundColor(Color.BLACK);
코드 전문
public class MainActivity extends AppCompatActivity {
Button btn_change;
ConstraintLayout layout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_change = findViewById(R.id.btn_change);
layout = findViewById(R.id.layout);
}
public void change (View view) {
layout.setBackgroundColor(Color.parseColor("#afe3ff"));
layout.setBackgroundColor(Color.BLACK);
}
}
배경색 바꾸기 2
- Listener Interface를 Activity Class에 구현
View.onClickListener를 구현하기 위해서 이 친구를 상속받자
클래스 옆에 implements View.onClickListener 붙여주기
그렇다면 아래같은 빨간줄이 뜰텐데 마우스를 대보면
각 버튼의 이벤트 리스너로 this(MainActivity) 지정해준다
btn_r.setOnClickListener(this); // 빨강
btn_g.setOnClickListener(this); // 초록
btn_b.setOnClickListener(this); // 파랑
onClick 메소드 내에 if문을 사용하여 id값을 판별하여 해당하는 아이디 값이 일치하면 색을 변경하게 만들어 보자
@Override
public void onClick(View view) {
// 이벤트가 작동되어야 하는 버튼 판단하기
if(view.getId() == R.id.btn_r) {
layout.setBackgroundColor(Color.RED);
} else if (view.getId() == R.id.btn_g) {
layout.setBackgroundColor(Color.GREEN);
} else {
layout.setBackgroundColor(Color.BLUE);
}
}
코드전문
package com.example.ex_0708;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.graphics.Color;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
// 클래스에 event를 구현하기 위해서 필요한 작업!
// 1. View.onClickListener 구현
// - Onclick () 추상메소드 생성 필수!
public class MainActivity2 extends AppCompatActivity implements View.OnClickListener {
Button btn_r,btn_g,btn_b;
ConstraintLayout layout;
// View.OnClickListener;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
btn_r = findViewById(R.id.btn_r);
btn_g = findViewById(R.id.btn_g);
btn_b = findViewById(R.id.btn_b);
layout = findViewById(R.id.layout);
// 각각 버튼에 onClick 이벤트 연결하기
btn_r.setOnClickListener(this); // 빨강
btn_g.setOnClickListener(this); // 초록
btn_b.setOnClickListener(this); // 파랑
}
@Override
public void onClick(View view) {
// 이벤트가 작동되어야 하는 버튼 판단하기
if(view.getId() == R.id.btn_r) {
layout.setBackgroundColor(Color.RED);
} else if (view.getId() == R.id.btn_g) {
layout.setBackgroundColor(Color.GREEN);
} else {
layout.setBackgroundColor(Color.BLUE);
}
}
}
글자변경하기 실습
아래 세가지 방법 다 사용해봤다
- XML로 Event Method 연결
- Listener Interface를 Activity Class에 구현
- Listener Class를 익명 Class로 정의
방법 1
- XML로 Event Method 연결
public class MainActivity3 extends AppCompatActivity {
Button btn;
EditText txt;
TextView change_txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
btn = findViewById(R.id.btn);
txt = findViewById(R.id.txt);
change_txt = findViewById(R.id.change_txt);
}
public void changetext(View view) {
change_txt.setText(txt.getText().toString());
}
}
방법 2
-Listener Interface를 Activity Class에 구현
public class MainActivity3 extends AppCompatActivity implements View.OnClickListener {
Button btn;
EditText txt;
TextView change_txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
btn = findViewById(R.id.btn);
txt = findViewById(R.id.txt);
change_txt = findViewById(R.id.change_txt);
btn.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if(view.getId() == R.id.btn) {
change_txt.setText(txt.getText().toString());
}
}
방법 3
- 익명클래스 이용
public class MainActivity3 extends AppCompatActivity {
Button btn;
EditText txt;
TextView change_txt;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main3);
btn = findViewById(R.id.btn);
txt = findViewById(R.id.txt);
change_txt = findViewById(R.id.change_txt);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
change_txt.setText(txt.getText().toString());
}
});
}
}
'Android' 카테고리의 다른 글
[Android Studio] 영화 API를 이용한 실습 (0) | 2022.07.18 |
---|---|
[Android Studio] Volley 사용하기 & Volley 예제/ 통신하기 (0) | 2022.07.15 |
[Android Studio] Layout이란? Layout 기본예제 (0) | 2022.07.07 |
[Android Studio] 안드로이드 스튜디오 프로젝트 만들기 & 기본 예제 (0) | 2022.07.07 |
[Android Studio] 안드로이드 스튜디오 다운받기 & 가상핸드폰 만들기 (0) | 2022.07.06 |