Отличить KeyEvent обычного меню от открытия IME - PullRequest
7 голосов
/ 29 марта 2012

При прослушивании ключевых событий в ActionBarSherlock для отображения меню переполнения на устройствах до ICS, и я столкнулся с интересной проблемой.Казалось бы, я не могу отличить простое нажатие клавиши от того, когда пользователь долго нажимает клавишу меню с целью отображения IME.Оба экземпляра KeyEvent абсолютно одинаковы и выглядят так:

Существует ли простой способ провести различие между этими двумя различными событиями?

1 Ответ

4 голосов
/ 29 марта 2012

Хмммм ... 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(), чтобы определить окончательное решение.

...