Diferenciar el menú normal KeyEvent desde la apertura de IME

Al escuchar eventos clave en ActionBarSherlock para mostrar el menú de desbordamiento en los dispositivos pre-ICS y estoy enfrentando un problema interesante. Parece que no soy capaz de diferenciar una pulsación de tecla simple en comparación con cuando el usuario está presionando la tecla de menú con la intención de mostrar el IME. Las KeyEvent instancias de KeyEvent son exactamente iguales y tienen el siguiente aspecto:

¿Existe una manera directa de diferenciar entre estos dos eventos distintos?

Hmmmm … onLongKeyPress() no parece funcionar con KEYCODE_MENU . Que molesto.

Esto parece funcionar en el Nexus S (4.0.3) y 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); } } 

Básicamente, tenga en cuenta si se trata de una larga presión o no en sus llamadas onKeyDown() , a continuación, utilizar esa información en onKeyUp() para determinar la disposición final.

  • Desea acceder a los eventos del botón de encendido en android
  • ¿Qué evento Android solo se llama una vez hasta que se destruye la actividad?
  • getDownTime () y getEventTime ()
  • excepción thread.stop ()
  • ¿Cómo distinguir entre mover y hacer clic en onTouchEvent ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.