Это должно быть довольно прямолинейно. Ознакомьтесь с KeyEvent.Callback на веб-сайте разработчика Android.
Там вы найдете 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);
}
person
cstrutton
schedule
03.06.2012