Я пытаюсь перепрограммировать функциональность клавиш увеличения и уменьшения громкости. В моем подходе используется плавающее представление, которое перехватывает ключевые события (аналогично приложению `головы чата). Флаг представления, который я использую: LayoutParams.FLAG_NOT_TOUCH_MODAL
, но, к сожалению, это блокирует другие события. Например, если я пытаюсь использовать приложение для обмена сообщениями, клавиатура не появляется, а кнопка BackButton блокируется. Это связано с тем, что мой взгляд имеет фокус.
Следуя совету не работает для моего случая. На github У меня есть полный код.
Я борюсь с частью флагов вида. У тебя есть идеи для меня? Нужно ли использовать другой подход, чтобы иметь представление, которое реагирует на ключевые события и не мешает остальным приложениям?
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
int keyCode = event.getKeyCode();
int action = event.getAction();
Log.d(TAG, MotionEvent.actionToString(action)
+ ", " + KeyEvent.keyCodeToString(keyCode));
if (event != null && mListener != null) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
mListener.onBackButtonPressed();
return true;
}
if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_UP) {
Toast.makeText(getContext(), "volume up", Toast.LENGTH_SHORT).show();
return true;
}
if (event.getKeyCode() == KeyEvent.KEYCODE_VOLUME_DOWN) {
Toast.makeText(getContext(), "volume down", Toast.LENGTH_SHORT).show();
return true;
}
}
return super.dispatchKeyEvent(event);
}