소프트 키보드가 열려있을 때 nexus 전화에서 작은 거꾸로 된 삼각형을 사용자가 누를 때 어떤 KeyEvent 동작이 호출되는지 궁금합니다. 일반 모드 넥서스에서뒤로 버튼을 눌렀을 때 넥서스 전화가 작동하는 핵심 동작은 무엇입니까?
은 다음과 같습니다 정상 코드는 잘 작동 : Nexus without keyboard
하지만 키보드가 팝업 때 다음과 같습니다과 코드가 작동하지 않습니다
소프트 키보드가 열려있을 때 nexus 전화에서 작은 거꾸로 된 삼각형을 사용자가 누를 때 어떤 KeyEvent 동작이 호출되는지 궁금합니다. 일반 모드 넥서스에서뒤로 버튼을 눌렀을 때 넥서스 전화가 작동하는 핵심 동작은 무엇입니까?
은 다음과 같습니다 정상 코드는 잘 작동 : Nexus without keyboard
하지만 키보드가 팝업 때 다음과 같습니다과 코드가 작동하지 않습니다
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);
}
.
제가 말했듯이, 에뮬레이터에서 키보드를 사용할 때이 코드가 작동하지 않습니다! –
키보드를 열거 나 조치가 실행되지 않을 때 디버거가 해당 코드를 입력합니까? –
2 개의 사진을 추가하고 질문을 업데이트했습니다. –
@Override 공공 무효 onBackPressed() {} – JCDecary
키보드가 숨겨져 왼쪽에있는 삼각형 포인트가 I이 (가) KeyEvent.KEYCODE_BACK 얻을 수 있지만 키보드 앞에서 내가하지 않을 때 나는 onKeyDown에()를 사용 @JCDecary 무슨 일이 일어나는지 알아! –
어쩌면 이것은 당신을 도울 것입니다 : http://android-developers.blogspot.ca/2009/12/back-and-other-hard-keys-three-stories.html. 당신이 원하는 것은 아닙니다. – JCDecary