Study Record

[안드로이드] View 입력 이벤트 개요 (click, long click, focus, key) 본문

안드로이드

[안드로이드] View 입력 이벤트 개요 (click, long click, focus, key)

초코초코초코 2023. 6. 14. 16:01
728x90

😶 View 입력 이벤트

사용자와 애플리케이션의 상호작용으로부터 이벤트(ex. 터치, 롱터치, 키보드 입력 등의 상호작용)를 가로챌 때 사용자가 상호작용하는 특정 View 객체로부터 캡처한다. 이에 필요한 수단은 View 클래스가 제공하고 있다.

 

 

이러한 상호작용(ex. 터치, 롱터치, 키보드 입력 등)을 Android 프레임워크에 의해 호출되고 이것을 가로채 좀 더 쉽게 정의할 수 있는 콜백을 저의하는 인터페이스를 이벤트 리스너라고 한다.

 

 

😶 이벤트 리스너

View 클래스 내에 있는 일종의 인터페이스로, 콜백 메서드가 담겨있다. 개발자가 특정 View 객체에 이러한 리스너를 등록하면 사용자의 상호직용으로 트리거되었을 때 Android 프레임워크에 의해 호출된다.

 

 

😶 콜백 메서드 종류

 

OnClick()

View.OnClickListener 에서 사용자가 항목을 터치했을 때 호출되는 메서드이다. setOnClickListener 를 사용하여 이벤트를 등록할 수 있다.

view1.setOnClickListener { view ->
    Log.d(TAGEVENT,"click event");
}

 

 

onLongClick()

View.OnLongClickListener 에서 사용자가 항목을 길게 터치했을 때 호출되는 메서드이다. setOnLongClickListener 를 사용하여 이벤트를 등록할 수 있다.

return 값을 반환해줘야 하는데 true를 반환하면 이벤트를 처리했으며 여기에서 중단해야 한다는 것을 의미하고, false를 반환하면 이벤트가 아직 미처리 상태이거나 이 이벤트를 다른 리스너로 계속 전달해야 함을 나타낸다. 따라서 true 로 하면 다른 이벤트 리스너가 호출되지 않을 수 있다.

view1.setOnLongClickListener { view ->
    Log.d(TAGEVENT,"long click event");
    false
}

 

 

onFocusChange()

View.OnFocusChangeListener 에서 Focus 가 맞춰지거나 이동할 때 호출되는 메서드이다. setOnFocusChangeListener 을 사용하여 이벤트를 등록할 수 있고 hasFoucs 가 ture 면 포커스를 갖고 있는 상태고 false 이면 포커스를 잃은 상태를 나타낸다.

view1.setOnFocusChangeListener { v, hasFocus ->
    Log.d(TAGEVENT,"onFocusChangeListener $hasFocus");
}

 

 

onKey()

View.OnKeyListener 에서 사용자가 키보드를 입력에 관련하여 호출되는 메서드이다. setOnKeyListener 를 사용하여 이벤트를 등록할 수 있고 keyCode 로 사용자가 입력한 키보드 값을 알 수 있다.

return 값을 반환해줘야 하는데 true를 반환하면 이벤트를 처리했으며 여기에서 중단해야 한다는 것을 의미하고, false를 반환하면 이벤트가 아직 미처리 상태이거나 이 이벤트를 다른 리스너로 계속 전달해야 함을 나타낸다. 따라서 true 로 하면 다른 이벤트 리스너가 호출되지 않을 수 있다.

view1.setOnKeyListener { v, keyCode, event ->
    if(event.action == KeyEvent.ACTION_DOWN) {
        Log.d(TAGEVENT,"onKeyListener ACTION_DOWN");

        if(KeyEvent.KEYCODE_ENTER == keyCode) {
            Log.d(TAGEVENT,"엔터를 눌렀을 경우")
        }
    }

    if(event.action == KeyEvent.ACTION_UP) {
        Log.d(TAGEVENT,"onKeyListener ACTION_UP")
    }

    false
}

 

 

onTouch()

View.onTouchListener 에서 사용자가 터치 이벤트로서 자격을 만족하는 작업을 수행하는 경우에 호출된다. 여기서의 작업은 누르기, 손 떼기와 같이 모든 움직임 동작이 포함된다.

return 값을 반환해줘야 하는데 true를 반환하면 이벤트를 처리했으며 여기에서 중단해야 한다는 것을 의미하고, false를 반환하면 이벤트가 아직 미처리 상태이거나 이 이벤트를 다른 리스너로 계속 전달해야 함을 나타낸다. 따라서 true 로 하면 다른 이벤트 리스너가 호출되지 않을 수 있다.

view1.setOnTouchListener { v, event ->
    if(event.action == MotionEvent.ACTION_DOWN) {
        Log.d(TAGEVENT,"onTouchListener ACTION_DOWN")
    }

    if(event.action == MotionEvent.ACTION_UP) {
        Log.d(TAGEVENT,"onTouchListener ACTION_DOWN")
    }
    false
}

 

 

Activity.dispatchTouchevent(MotionEvent)

모든 터치 이벤트가 전달되기 전에 Activity 가 이들을 가로챌 수 있도록 할 수 있다.

 

 

ViewGroup.onInterceptTouchEvent(MotionEvent)

이벤트가 하위 뷰로 전달될 때 ViewGroup 이 이벤트를 관측할 수 있다.

 

 

ViewParent.requestDisallowInterceptTouchEvent(boolean)

onInterceptTouchEvent(MotionEvent) 가 있는 터치 이벤트를 가로채면 안 된다고 나타내고자 할 때 상위 뷰에서 이 메서드를 호출할 수 있다.

 

 

View.requestFocus()

특정 뷰에 포커스를 요청할 수있다.

 

 

 

입력 이벤트 개요  |  Android 개발자  |  Android Developers

입력 이벤트 개요 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Android에는 사용자와 애플리케이션의 상호작용으로부터 이벤트를 가로채는 방법이 여러 가

developer.android.com

 

728x90