ICS 以前のデバイスでオーバーフロー メニューを表示するために ActionBarSherlock でキー イベントをリッスンする際に、興味深い問題に直面しています。ユーザーがIMEを表示するためにメニューキーを長押ししているときと、単純なキーの押下を区別できないようです。どちらKeyEvent
のインスタンスもまったく同じで、次のようになります。
これら 2 つの異なるイベントを区別する簡単な方法はありますか?
ICS 以前のデバイスでオーバーフロー メニューを表示するために ActionBarSherlock でキー イベントをリッスンする際に、興味深い問題に直面しています。ユーザーがIMEを表示するためにメニューキーを長押ししているときと、単純なキーの押下を区別できないようです。どちらKeyEvent
のインスタンスもまったく同じで、次のようになります。
これら 2 つの異なるイベントを区別する簡単な方法はありますか?
うーん...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()
て最終的な処理を決定します。