7

在侦听 ActionBarSherlock 中的关键事件以在 ICS 之前的设备上显示溢出菜单时,我遇到了一个有趣的问题。似乎我无法区分简单的按键与用户长按菜单键以显示 IME 的情况。这两个KeyEvent实例完全相同,如下所示:

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

4

1 回答 1

4

嗯...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()来确定最终处置。

于 2012-03-29T18:35:48.407 回答