android programming - input

17

Upload: jake-yoon

Post on 20-Jun-2015

1.433 views

Category:

Technology


3 download

DESCRIPTION

Chapter 05 Input

TRANSCRIPT

Page 1: Android Programming - Input
Page 2: Android Programming - Input

Contents이벤트 핸들러 - 이벤트 처리 - 핸들러의 우선순위 - 외부변수 엑세스

여러가지 이벤트 - 터치 입력 - 키보드 입력 - 위젯의 이벤트 처리 - 포커스 관리 - 타이머 이벤트

Page 3: Android Programming - Input

이벤트 핸들러이벤트 처리 - GUI 채택

- 사용은 편리 , 개발은 어려움

- 이벤트를 처리하는 다양한 방법 - 콜백 메서드 재정의 - 리스너 인터페이스 - 익명 이너클래스

Page 4: Android Programming - Input

이벤트 처리방법콜백 메서드 재정의 콜백 메서드 : 특정 이벤트가 발생

하였을 때 시스템에 의해 자동으로 호출되는 메서드

재정의를 하려면 해당 클래스를 상속 받아야 한다 . (OOP 개념 )

단점 : 매번 해당 클래스를 상속받아야 한다 . 콜백 메서드로 존재하지 않는 이벤트가 있다 .

Page 5: Android Programming - Input

이벤트 처리방법리스너 인터페이스 구현 리스너 인터페이스 : 특정 이벤트를

처리하는 인터페이스 1. 리스너를 구현하는 클래스를 선언하고

추상메서드를 구현 2. 리스너 객체를 선언하고 생성한다 . 3. 리스너 객체를 뷰의 이벤트와 연결한다 .

단점 : 인터페이스 구현을 위해 클래스를 선언해야 하며 , 객체를 생성하고 이벤트와 연결해줘야 한다 . ( 번거롭다 )

Page 6: Android Programming - Input

이벤트 처리방법익명 이너클래스 사용 이너클래스 : 클래스 안에서 정의된

클래스 ( 자바에서만 제공되는 문법 )

익명이너클래스 : 상위 클래스나 인터페이스의 메서드 하나를

재정의하기 위해 클래스를 선언하는 경우 , 그리고 그 클래스의 객체가 단 하나만 필요한 경우는 굳이 클래스를 선언할 필요 없이 상속과 재정의를 동시에 할 수 있다 .

Page 7: Android Programming - Input

이벤트 처리방법익명 이너클래스 비교 ◆ 일반적인 코드 class MyClass implements Interface {

메서드 구현}MyClass obj = new MyClass();

- Interface 를 상속받고 , class 구현부에서 method 를 재정의하고 class 의 객체를 생성

◆ 축약된 코드 Interface obj = new Interface() {

메서드 구현};

- 바로 직관적으로 Interface 를 클래스처럼 객체생성해서 method 를 재정의

( class 가 아니므로 객체를 또 생성할 수 없다 )

Page 8: Android Programming - Input

이벤트 처리방법익명 이너클래스의 임시객체사용 임시객체 : 객체에 이름을 주고 생성한

후 메서드로 전달하는 것이 아니라 메서드 인수 목록에서 new 연산자로 바로 생성하는 것

Page 9: Android Programming - Input

이벤트 처리방법임시객체의 비교 ◆ 이름있는 객체 사용 Class obj = new Class(); Method( obj );

- Class 의 객체를 생성한 뒤에 생성한 객체를 메서드의 인자로 넘겨줌

◆ 임시객체 사용 Method( new Class() );

- Class 의 객체를 생성하는 것과 동시에 메서드의 인자로 넘겨줌 ( 이름이 없는 개체가 생성됨 )

Page 10: Android Programming - Input

핸들러의 우선순위우선순위 좁은 범위일 수록 우선순위가 높다 .1.이벤트 리스너2.뷰의 콜백 메서드3.액티비티의 콜백 메서드

핸들러의 return 값으로 다음 순위 메서드의 호출기회를 통제할 수 있다 .

true 를 리턴하면 해당 이벤트가 종료되며 , false를 리턴하면 다음 순위의 메서드가 호출된다 .

Page 11: Android Programming - Input

외부 변수 엑세스핸들러내에서 검색하여 사용하기

예 ) public boolean onTouch(View v, MotionEvent event) {

if( event.getAction() == MotionEvent event ) { TextView text = (TextView)findViewByID(R.id.text);

text.setText(“Touched”); return true; } return false;

}

- 외부 변수를 핸들러내에서 검색하여 사용하는 것은 번거로우며 실행속도에도 불리하다 .

Page 12: Android Programming - Input

외부 변수 엑세스외부클래스의 멤버로 선언해두고

Create 함수에서 검색해두고 사용하기

예 )public class handle extends Activity {

TextView text; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); text = (TextView)findViewByID(R.id.text); … public boolean onTouch(View v, MotionEvent event) {

if( event.getAction() == MotionEvent event ) { text.setText(“Touched”); return true; } return false;

}

Page 13: Android Programming - Input

외부 변수 엑세스외부클래스의 멤버로 선언해두고

Create 함수에서 검색해두고 사용하기

- 이너클래스는 외부클래스의 멤버를

자유자재로 사용할 수 있고 , 또한 미리 검색해둔 멤버를 참조하므로 훨씬 효율적이다 .

- 그러나 리스너가 아주 많을 경우 외부클래스가 너무 뚱뚱해진다 .

Page 14: Android Programming - Input

외부 변수 엑세스외부클래스의 메서드의 지역변수로

선언후에 사용하기

예 )public class handle extends Activity {

public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView text = (TextView)findViewByID(R.id.text); … public boolean onTouch(View v, MotionEvent event)

{ if( event.getAction() == MotionEvent event ) {

text.setText(“Touched”); return true; } return false;

}

Page 15: Android Programming - Input

외부 변수 엑세스외부클래스의 메서드의 지역변수로

선언후에 사용하기

- 외부클래스가 뚱뚱해지지 않도록 메서드안에 지역변수로 선언하는방법 .

- 메서드의 지역변수를 이너클래스에서 사용하려면 일반변수로 선언하면 안되고 final 변수로 선언해야만 한다 .

( 이유는 해당메서드가 종료되면 변수가 메모리에서 사라지는 것을 방지 )

Page 16: Android Programming - Input

포커스 관리키보드 이벤트는 포커스를 가진

뷰에게만 전달된다 . - View 의 setFocusable() 함수와

setFocusableInTouchMode() 함수를 이용하여 , 터치모드나 일반모드에서 포커스를 받을 수 있도록 한다 .

p.s 터치모드 : 화면을 터치했을때의 모드일반모드 : 키보드를 눌렀을때의 모드

Page 17: Android Programming - Input