Recent Posts
Recent Comments
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- 유튜브
- n^2 배열 자르기
- 자바
- 셀레니움
- android
- javascript
- js
- 크롤링
- jsp
- 함수형 인터페이스
- 세션
- 이진 변환 반복하기
- 개발
- 파이썬
- 개발자
- jdbc
- 데이터베이스
- Python
- 프로그래밍
- 코딩
- 파일 저장
- 메모장
- 입출력
- java
- Programmers
- 자바스크립트
- 형태소 분석기
- MySQL
- 모바일
- 프로그래머스
Archives
- Today
- Total
개인용 복습공간
[Android] 기본 이벤트 처리 본문
사용자 간의 상호작용을 위한 간단한
이벤트 처리 과정을 다뤄보려 한다.
기본 이벤트 처리
컴퓨터를 사용할 때 프로그램이 반응하도록 사용자가 생성하는 작업이다. 키보드의 키를 누르는 것이 대표적이며, 마우스 버튼을 누르거나 마우스를 이동하는 것 따위가 있다.
기본 이벤트 종류
- 클릭
OnClickListener
Void onClick (View v) - 포커스 변경
OnFocusChangeListener
Void onFocusChange (View v, boolean hasFocus) - 롱클릭
OnLongClickListener
Boolean onLongClick (View v) - 키 (특정 위치를 사용하는 경우)
OnKeyListener
Boolean onKey (View v, int keyCode, KeyEvent event) - 키 (특정 위치를 사용하지 않는 경우)
onKeyDown (int keycode, KeyEvent event) - 터치
OnTouchListener
Boolean onTouch (View v, MotionEvent event)
Key 코드
- KEYCODE_DPAD_LEFT 왼쪽 화살표
- KEYCODE_DPAD_LEFT 왼쪽 화살표
- KEYCODE_DPAD_RIGHT 오른쪽 화살표
- KEYCODE_DPAD_UP 위쪽 화살표
- KEYCODE_DPAD_DOWN 아래쪽 화살표
- KEYCODE_DPAD_CENTER 중앙 버튼
- KEYCODE_CALL 통화 버튼
- KEYCODE_ENDCALL 통화 종료 버튼
- KEYCODE_HOME 홈 버튼
- KEYCODE_BACK 뒤로 가기 버튼
- KEYCODE_BOLUME_UP 볼륨 업 버튼
- KEYCODE_BOLUME_DOWN 볼륨 다운 버튼
- KEYCODE_0 ~ KEYCODE_9 숫자 0 ~ 9
- KEYCODE_A ~ KEYCODE_Z 알파벳 A ~ Z
키 코드 가운데 숫자, 알파벳 등의 입력은 안드로이드 버전에 따라 인식이 제한된다.
기본 이벤트 예제
한 화면에 여러 이벤트가 존재하는 다중 이벤트 처리를 해보려고 한다.
다음은 작성한 레이아웃이다.
activity_main.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
<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=".MainActivity">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/v_gline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_percent="0.50" />
<Button
android:id="@+id/button01"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="Click"
android:textAllCaps="false"
app:layout_constraintEnd_toStartOf="@+id/v_gline"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button02"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:text="Long Click"
android:textAllCaps="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="@+id/v_gline"
app:layout_constraintTop_toTopOf="parent" />
<EditText
android:id="@+id/editText01"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/button02" />
<EditText
android:id="@+id/editText02"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:ems="10"
android:inputType="textPersonName"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText01" >
<requestFocus/>
</EditText>
<TextView
android:id="@+id/textView01"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="8dp"
android:background="#BDBDBD"
android:text="TouchEvent Test"
android:textAppearance="@style/TextAppearance.AppCompat.Large"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/editText02" />
</androidx.constraintlayout.widget.ConstraintLayout>
|
cs |
constraintlayout 에서는 기준 위치 설정, 비율 지정 등이 필요할 때 Guideline 을 사용한다.
레이아웃 상의 초기 포커스 변경이 필요한 경우, 포커스를 가지는 구성요소 안에
<requestFocus />를 추가한다.
다음은 코드 작성이다. 자세한 건 주석으로 작성해 두었다.
MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
//필요한 리스너를 모두 작성
public class MainActivity extends AppCompatActivity implements View.OnClickListener,
View.OnLongClickListener,
View.OnFocusChangeListener,
View.OnKeyListener,
View.OnTouchListener {
Button btn01, btn02;
EditText edit01, edit02;
TextView text01;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn01 = (Button) findViewById(R.id.button01);
btn01.setOnClickListener(this); //클릭리스너 등록
btn02 = (Button) findViewById(R.id.button02);
btn02.setOnLongClickListener(this); //롱클릭리스너 등록
edit01 = (EditText) findViewById(R.id.editText01);
edit01.setOnFocusChangeListener(this); //포커스리스너 등록
edit02 = (EditText) findViewById(R.id.editText02);
edit02.setOnKeyListener(this); //키리스너 등록
text01 = (TextView) findViewById(R.id.textView01);
text01.setOnTouchListener(this); //터치리스너 등록
}
@Override
public void onClick(View v) {
Toast.makeText(this, "onClick!", Toast.LENGTH_LONG).show(); //토스트 알림 출력
}
@Override
public boolean onLongClick(View v) {
Toast.makeText(this, "onLongClick!", Toast.LENGTH_LONG).show(); //출력한 메세지 작성, 메세지 길이(Toast.LENGTH_LONG)
return false;
}
@Override
public void onFocusChange(View v, boolean hasFocus) { //포커스 변경이 발생했을 때 호출
String s = "";
if (hasFocus) { //포커스를 얻은 경우
((EditText) v).setText("");
} else { //포커스를 잃은 경우
s = edit01.getText().toString();
edit01.setText(s + "+ focus change");
}
}
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) { //키 이벤트 발생시
if (keyCode == KeyEvent.KEYCODE_BACK) {
Toast.makeText(this, "KEYCODE_BACK", Toast.LENGTH_LONG).show(); //back 키
}
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { //볼륨키
text01.setText("Volume Up");
}
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
text01.setText("Volume Down");
}
return false;
}
@Override
public boolean onTouch(View v, MotionEvent event) { //터치 이벤트 발생시
if (event.getAction() == MotionEvent.ACTION_DOWN) { //터치 할 때
text01.setText("ACTION_DOWN");
return true;
}
if (event.getAction() == MotionEvent.ACTION_MOVE) { //터치한 상태로 움직일 때
text01.setText("ACTION_MOVE");
return false;
}
if (event.getAction() == MotionEvent.ACTION_UP) { // 떼는 우
text01.setText("ACTION_UP");
return false;
}
return false;
}
}
|
cs |
기본 이벤트 실행화면
꾹 눌러야 onLongClick 이벤트가 발생한다.
다른 editText로 포커스 이동할 시 작동한다. 다시 포커스를 획득하면 기존 데이터를 삭제한다.
볼륨 업, 다운이나 Back 키를 누르면 작동하는 이벤트이다.
TextView에서 작동하는 터치 이벤트이다.
'Android' 카테고리의 다른 글
[Android] Intent를 이용한 데이터 전달 (데이터 전달 + 파일 저장 예제) (0) | 2021.05.11 |
---|---|
[Android] 데이터 저장 방법 - 프레퍼런스, 파일 저장 (0) | 2021.05.09 |
Comments