ICS 이전 장치에 오버플로 메뉴를 표시하기 위해 ActionBarSherlock의 주요 이벤트를 수신하는 중 흥미로운 문제가 있습니다. 사용자가 IME를 표시 할 의도로 메뉴 키를 길게 누르면 대 간단한 키 프레스를 구별 할 수없는 것처럼 보입니다. 두 KeyEvent
인스턴스는 동일하며, 다음과 같이 이러한 두 가지 이벤트를 구별 할 수있는 간단한 방법이IME에서 정규 메뉴 키 이벤트 열기
있습니까?
ICS 이전 장치에 오버플로 메뉴를 표시하기 위해 ActionBarSherlock의 주요 이벤트를 수신하는 중 흥미로운 문제가 있습니다. 사용자가 IME를 표시 할 의도로 메뉴 키를 길게 누르면 대 간단한 키 프레스를 구별 할 수없는 것처럼 보입니다. 두 KeyEvent
인스턴스는 동일하며, 다음과 같이 이러한 두 가지 이벤트를 구별 할 수있는 간단한 방법이IME에서 정규 메뉴 키 이벤트 열기
있습니까?
흠 ... 은 KEYCODE_MENU
과 작동하지 않는 것 같습니다. 얼마나 짜증나.
이 넥서스 S (4.0.3)와 넥서스 원 (2.3.6)에서 작동하는 것 같다 :
public class MenuKeyDetectorActivity extends Activity {
boolean wasLongPress=false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
wasLongPress=wasLongPress | event.isLongPress();
}
return(false);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
Log.w("MKD", String.format("wasLongPress: %b", wasLongPress));
wasLongPress=false;
}
return(false);
}
}
기본적으로이 아닌 onKeyDown()
전화에 긴 프레스 또는인지주의, onKeyUp()
에 해당 정보를 사용하여 최종 처분을 결정하십시오.
이 기술을 사용하면 'onKeyEvent'와 함께 작동하고 위/아래 동작을 감지 할 수 있습니다. 왜 그렇게되지 않을지 모르겠다. 감사! –
'onPrepareOptionsMenu' 콜백을 사용하는 것이 나의 대안이지만 키 이벤트를 통해 처리하는 것을 선호합니다. –