これはかなり簡単です。Android 開発者の Web サイトでKeyEvent.Callbackを確認してください。
onKeyLongPress()
そこにはとがonKeyDown()
ありますonKeyUp()
。これにより、正しい軌道に乗るはずです。さらにヘルプが必要な場合は、コメントするか、コードを投稿してください。
編集:質問を読み直しました。シングル クリックとロング クリックの区別がつかない場合は、クリックの継続時間を使用onKeyDown
しonKeyUp
て確認する必要があります。基本的に、 でタイマーを開始し、onKeyDown
で時間を確認しonKeyUp
ます。を監視する必要がありFLAG_CANCELED
ます。
さらに編集:いくつかのテストを行う時間を見つけました。このコードは、必要なことを行う必要があります (onKeyUp()
短押しイベントのみをonLongPress()
取得し、長押しイベントのみを取得します)。
ここで重要なのはevent.startTracking()
、onKeyDown()
ハンドラーでの呼び出しです。
配置しますActivity
(これはカスタムビューでも機能するはずですが、テストされていません):
@Override
public boolean onKeyLongPress(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
// Handle Long Press here
Log.i("KeyCheck", "LongPress");
return true;
}
return super.onKeyLongPress(keyCode, event);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
Log.i("KeyCheck", "KeyDown" + keyCode);
if (keyCode == KeyEvent.KEYCODE_MENU) {
event.startTracking(); //call startTracking() to get LongPress event
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU && event.isTracking()
&& !event.isCanceled()) {
// handle regular key press here
Log.i("KeyCheck", "KeyUp");
return true;
}
return super.onKeyUp(keyCode, event);
}