# 입력 위젯
- 사용자 인터페이스에서 사용자와의 상호작용을 제공하는 컴포넌트
- Button : 어떤 도작을 수행하기 위하여 사용자가 누를 수 있고 클릭하는 푸시 버튼
- Text field : 편집이 가능한 텍스트 필드. AutoCompleteTextView(자동 완성)
- Checkbox : 그룹에서 여러 가지 옵션을 동시에 선택할 수 있음
- Radio button : 그룹에서 하나의 옵션만 선택 가능
- Toggle button : 라이트 인디케이터가 있는 on/off 버튼
- Spinner : 사용자가 여러 값 중에서 하나를 선택할 수 있는 드롭 다운 리스트
- Pickers : up/down 버튼이나 스와이프 제스처를 통하여 하나의 값을 선택하는 대화 상자. DatePicker(날짜 선택), TimePicker(시간 선택)
# 버튼
1. 버튼 지정
- 텍스트 버튼(android:text=“텍스트” => 텍스트 지정)
- 이미지 버튼(android:src=“@drawable/이미지 파일 이름” => 이미지 지정)
- 텍스트와 이미지를 동시에 가지는 버튼(텍스트 지정, android:drawableLeft=“@drawable/이미지 파일 이름” => 이미지 지정)
2. 버튼 이벤트 처리
- XML 레이아웃 파일에 이벤트 처리 메소드를 등록
- 사용자가 버튼을 누르면 클릭 이벤트 발생됨
- 이벤트 밠갱하면 레이아웃에 등록된 메소드가 자동으로 호출됨(onClick 속성 추가)
- onClick에 메소드 구현(public, void 반황형, View를 메소드의 인수로 가짐)
- 토스트 메시지 출력 public void onClick(View v){
(Toast.makeText(getApplicationContext(), “눌러짐”, Toast.LENGTH_SHORT).show();}
- makeText(Context, CharSequence text, int duration)
- 뷰의 일종, 화면의 잠시 나타나는 메시지
3. 커스텀 버튼(custom button)
- android:background=“@drawable/버튼xml” => 버튼 XML 파일 지정
- 버튼 xml 생성한 후 item 생성
- 버튼이 눌려졌을 때 이미지 android:state_pressed=“true”
- 버튼이 포커스를 가질 때 이미지 android:state_foused=“true”
- 버튼이 정상 상태일 때 이미지 android:state_normal=“true” => false인 경우
- 아이템 요소의 순서 중요(위에서 아래로 방문)
# 이벤트를 처리하는 방법
- 폴링(polling)방식 : 무한 루프를 돌면서 사용자의 입력을 기다림. cpu 낭비
- 이벤트 구동(event-driven)방식 : 다른 작업을 하다가 입력이 발생하면 이벤트 발생 후 처리
1. XML 파일에 이벤트 처리 메소드 등록
- 클릭 이벤트만 처리 가능
2. 이벤트를 처리하는 객체를 생성하여 이벤트 처리
- 객체를 생성하여 위젯에 등록
3. 뷰 클래스의 이벤트 처리 메소드를 재정의
- 커스텀 뷰 작성 시에만 사용 가능
# 이벤트 처리 객체 이용하여 이벤트 처리
- 이벤트 리스너 : 이벤트를 처리하는 메소드들이 정의된 인터페이스
- 이벤트 리스너를 구현하는 클래스 정의함
class Listener implements View.onClickListener{
public void onClick(View v){ }
- 이 클래스의 객체를 생성하여 위젯에 등록
Listener lis = new Listner();
button.setOnClickListener(lis);
- 위젯에 이벤트 발생하면 등록된 이벤트 리스너 안의 콜백 메소드가 자동적으로 호출
# 리스너 인터페이스
- View.OnClickListener : 사용자가 어떤 항목을 터치하거나 내비게이션 키나 트랙볼로 항목으로 이동한 후에 엔터키를 눌러서 선택하면 호출
- View.OnLongClickListener : 사용자가 항목을 터치하여서 일정 시간 동안 그대로 누르고 있으면 발생
- View.OnFocusChangListner : 사용자가 하나의 항목에서 다른 항목으로 포커스를 이동할 때 호출
- View.OnKeyListener : 포커스를 가지고 있는 항목 위에서 키를 눌렀다가 놓았을 때 호출
- View.OnTouchListener : 사용자가 터치 이벤트로 간주되는 동작을 한 경우에 호출
# 리스너 객체를 생성하는 방법
1. 내부 클래스로 정의
2. 무명 클래스로 정의 (가장 많이 사용)
3. 액티비티 클래스에 구현
4. 람다식 이용 (복잡)
# 내부 클래스(inner class)로 처리
- 클래스 안에 정의된 클래스
- 자신이 속해있는 클래스의 멤버들에 자유롭게 접근 가능
# 무명 클래스(anonymous class)로 처리
- 딱 한 번 사용되는 클래스
- 클래스 몸체는 정의되지만 이름이 없는 클래스
- 이름 없는 객체인 임시 객체 생성
- 부모 클래스에서 상속받아서 작성하거나 인터페이스 구현해서 작성 가능
# 액티비티에 인터페이스 구현
- 이벤트 처리할 클래스를 새로 작성할 필요 없음
# 텍스트 필드(text field)
- 사용자가 앱에 텍스트를 타이핑하여 입력 가능
- 단일 라인, 멀티 라인
- getText() : 사용자가 입력한 텍스트 읽어옴
- setText() : 텍스트를 쓰기
# 키보드 종류 지정 (inputType)
- text : 일반적인 텍스트
- textEmailAddress : @문자를 이용한 이메일 주소
- textUri : /문자를 이용한 URL 주소
- number : 숫자
- phone : 전화번호
- textPostalAddress : 우편 번호
- textPersonName : 이름
# 키보드 제어
- textCapSentences : 각 문장의 첫 번째 글자를 대문자로
- textCapWords : 각 단어의 첫 번째 글자를 대문자로
- textAutoCorrect : 자동적으로 잘못된 단어를 수정
- textPassword : 입력되는 글자를 점으로 표시
- textMultiLine : 멀티 라인을 입력받을 수 있음
# 키보드 동작 지정
- android:imeOptions 속성을 지정
- actionSend : 키보드에 Send 버튼 생성
# 체크 박스(checkbox)
- 사용자가 하나의 그룹 안에서 여러 개를 동시에 선택
- onClick 속성 사용
- isChecked()을 호출해서 체크 박스의 새로운 상태를 얻음
# 라디오 버튼(radio button)
- 하나의 그룹 안에서 한 개의 버튼만 선택 가능
- RadioButton : 라디오 버튼 생성. TextView 클래스의 하위 클래스
- RadioGroup : 라디오 버튼들을 그룹핑
- void toggle() : 선택 상태를 현재의 반대로 변경
# 토글 버튼(toggle button)
- 두 가지의 상태 중 하나로 토글 되는 버튼
- 스위치라는 새로운 토글 버튼
- onClick 속성 사용하여 이벤트 처리
- android:textOn=“on”
- android:textOff=“off”
# 레이팅 바(rating bar)
- 별 모양을 이용하여 점수 줌
- android:numStarts=“5” => 별 개수
- android:stepSize=“1.0” => 간격
# 커스텀 컴포넌트(Custom Components)
- 개발자가 직접 View 클래스를 상속받아서 필요한 위젯 개발
- 기존의 위젯에서 약간의 변화만 줄 경우 기존의 위젯을 상속받아서 메소드를 재정의
- View 클래스를 상속받으면 위젯의 형태와 동작을 개발자가 세밀하게 제어 가능
1. View 클래스를 상속받아서 자식 클래스를 생성
2. 부모 클래스의 메소드를 재정의 (주로 on이 붙은 메소드)
3. 작성된 커스텀 컴포넌트 사용 (뷰 클래스 객체가 사용될 수 있는 곳 어디든 사용 가능)
# 재정의할 수 있는 View 클래스의 이벤트 처리 메소드
- onKeyDown(int, KeyEvent) : 사용자가 키보드를 눌렀을 때 호출
- onKeyUp(int, KeyEvent) : 사용자가 키에서 손을 뗐을 때 호출
- onTrackballEvent(MotionEvent) : 사용자가 트랙볼을 움직였을 때 호출
- onTouchEvent(MotionEvent) : 사용자가 화면을 터치했을 때 호출
- onFocusChanged(boolean, int, Rect) : 뷰가 포커스를 얻거나 잃었을 때 호출
- super 키워드를 이용하여 부모 클래스의 이벤트 처리 메소드도 호출
- invalidate()는 뷰의 화면을 무효화하여 화면을 다시 그리게 하는 메소드
# 이벤트 처리 메소드 재정의의 문제점
- View 클래스를 상속받으면 번거로움
- 자신만의 커스텀 컴포넌트를 작성할 때는 괜찮음
# 터치 이벤트
1. 뷰의 콜백 메소드 재정의 : onTouchEvent(MotionEvent e)를 재정의
2. 리스너 등록 : onTouch(View v, MotionEvent e)를 재정의
# MotionEvent 객체
- 액션 코드와 좌표 들어 있음
- 액션 코드 : 터치가 올라가는지 내려오는지
- 좌표값 : 터치가 발생한 좌표값
- getAction() 메소드 : 터치 동작에 대한 정보 반환
# 액션 코드 종류
- ACTION_DOWN : 누르는 동작이 시작됨
- ACTION_UP : 누르고 있다가 뗄 때 발생함
- ACTION_MODE : 누르는 도중에 움직임
- ACTION_CANCEL : 터치 동작이 취소됨
- ACTION_OUTSIDE : 터치가 현재의 위젯을 벗어남
# onTouchEvent()의 반환값
- true이면 자신의 이벤트를 완벽하게 처리하였다는 의미
- false이면 다른 메소드가 동일한 이벤트를 다시 처리하는 것을 허용
- 현재의 이벤트가 완전히 처리하지 않은 것으로 판단하여 현재의 이벤트에 이어지는 ACTION_MOVE, ACTION_UP 이벤트 없앰. ACTION_DOWN 이벤트는 삭제하지 않음.
- 3가지 터치 이벤트를 처리하고 싶으면 return true; 해줌
# 멀티 터치 이벤트
- 여러 개의 손가락을 이용하여 화면을 터치
- 이미지 확대/축소할 때 사용
- 핀치줌(pinch zoom) : 두 손가락으로 확대/축소
- ACTION_DOWN : 화면을 터치하는 첫 번째 포인터에 대하여 발생. 제스처 인식 시작.
첫 번째 터치는 항상 MotionEvent에서 인덱스 0번에 저장
- ACTION_POINTER_DOWN : 첫 번째 포인터 이외의 포인터에 대하여 발생. 포인터 데이터는 getActionIndex()가 반환하는 인덱스에 저장
- ACTION_MOVE : 화면을 누르면서 이동할 때 발생
- ACTION_POINTER_UP : 마지막 포인터가 아닌 다른 포인터가 화면에서 없어지면 발생
- ACTION_UP : 화면을 떠나는 마지막 포인터에 대하여 발생
- 인덱스 : 이벤트가 발생할 때마다 포인터에 대한 정보는 배열에 저장되어 이벤트 처리 메소드에 제공. 터치의 순서가 인덱스. 변경 가능
- 아이디 : 포인터는 터치가 시작되면 아이디 부여받음. 포인터가 화면을 터치하고 있는 동안에는 포인터의 아이디는 변경되지 않음
- getPointerId() 메소드 : 포인터의 아이디 얻음
- findPointerIndex() 메소드 : 포인터의 아이디를 사용해 포인터의 인덱스 얻음
- getActionIndex() : 포인터 인덱스 얻음
'전공 공부 > 안드로이드프로그래밍' 카테고리의 다른 글
고급 위젯과 프래그먼트 (0) | 2021.01.14 |
---|---|
메뉴와 대화 상자 (0) | 2021.01.14 |
사용자 인터페이스 기초 (0) | 2021.01.14 |
애플리케이션 기본 구조 (0) | 2021.01.13 |
안드로이드 기초 사항 (0) | 2021.01.13 |