从IME打开区分常规菜单KeyEvent

在监听ActionBarSherlock中的关键事件时,为了显示ICS前设备上的溢出菜单,我正面临一个有趣的问题。 似乎我无法区分简单的按键与用户长时间按下菜单键以显示IME的意图。 两个KeyEvent实例完全相同,如下所示:

有没有直接的方法来区分这两个不同的事件?


嗯... onLongKeyPress()似乎不适用于KEYCODE_MENU 。 多烦人。

这似乎适用于Nexus S(4.0.3)和Nexus One(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()使用该信息来确定最终处置。

链接地址: http://www.djcxy.com/p/58547.html

上一篇: Differentiate Regular Menu KeyEvent from IME Opening

下一篇: ins always C extensions (even on PyPy)?