2016-08-02 12 views
0

소프트 키보드가 열려있을 때 nexus 전화에서 작은 거꾸로 된 삼각형을 사용자가 누를 때 어떤 KeyEvent 동작이 호출되는지 궁금합니다. 일반 모드 넥서스에서뒤로 버튼을 눌렀을 때 넥서스 전화가 작동하는 핵심 동작은 무엇입니까?

은 다음과 같습니다 정상 코드는 잘 작동 : Nexus without keyboard

하지만 키보드가 팝업 때 다음과 같습니다과 코드가 작동하지 않습니다

Nexus with keyboard

+0

@Override 공공 무효 onBackPressed() {} – JCDecary

+0

키보드가 숨겨져 왼쪽에있는 삼각형 포인트가 I이 (가) KeyEvent.KEYCODE_BACK 얻을 수 있지만 키보드 앞에서 내가하지 않을 때 나는 onKeyDown에()를 사용 @JCDecary 무슨 일이 일어나는지 알아! –

+0

어쩌면 이것은 당신을 도울 것입니다 : http://android-developers.blogspot.ca/2009/12/back-and-other-hard-keys-three-stories.html. 당신이 원하는 것은 아닙니다. – JCDecary

답변

2

for Android API 5 :

@Override 
public void onBackPressed() { 
    // your code. 
} 

API 5 이전의 Android의 경우 다음을 사용하세요. 0

이 답변에 따라 ..

이 방법 키보드가 숨겨져있는 경우에만 작동 :

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK) { 
     // your code 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 
How to handle back button in activity

편집을 참조하십시오 Detect back key press - When keyboard is open

최고 구현되는 액션은 dispatchKeyEventPreIme입니다. 예는 다음과 같습니다 mActivity이 활동 클래스 (이)입니다

@Override 
    public boolean dispatchKeyEventPreIme(KeyEvent event) { 
     Log.d(TAG, "dispatchKeyEventPreIme(" + event + ")"); 
     if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) { 
      KeyEvent.DispatcherState state = getKeyDispatcherState(); 
      if (state != null) { 
       if (event.getAction() == KeyEvent.ACTION_DOWN 
         && event.getRepeatCount() == 0) { 
        state.startTracking(event, this); 
        return true; 
       } else if (event.getAction() == KeyEvent.ACTION_UP 
         && !event.isCanceled() && state.isTracking(event)) { 
        mActivity.onBackPressed(); 
        return true; 
       } 
      } 
     } 

     return super.dispatchKeyEventPreIme(event); 
    } 

.

+0

제가 말했듯이, 에뮬레이터에서 키보드를 사용할 때이 코드가 작동하지 않습니다! –

+0

키보드를 열거 나 조치가 실행되지 않을 때 디버거가 해당 코드를 입력합니까? –

+0

2 개의 사진을 추가하고 질문을 업데이트했습니다. –