Android: как предотвратить смена фокуса при нажатии клавиши навигации?

1

По какой-то особой причине я должен сам управлять фокусом.
В эмуляторе для перемещения фокуса были назначены KeyEvent.KEYCODE_DPAD_DOWN и UP. Чтобы все было в порядке, я прототипировал, как показано ниже.

public class Button extends android.widget.Button {

public Button(Context context) {
    super(context);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (isPreventSystemBehavior(keyCode)) {

        return true;
    }

    return super.onKeyDown(keyCode, event);
}

@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
    if (isPreventSystemBehavior(keyCode)) {
        return true;
    }

    return super.onKeyUp(keyCode, event);
}

private boolean isPreventSystemBehavior(int keyCode) {
    switch (keyCode) {
    case KeyEvent.KEYCODE_DPAD_DOWN:
    case KeyEvent.KEYCODE_DPAD_UP:
    case KeyEvent.KEYCODE_DPAD_LEFT:
    case KeyEvent.KEYCODE_DPAD_RIGHT:
        return true;
    }

    return false;
}
}

Это сработало. Но для случая EditText KeyEvent.KEYCODE_DPAD_LEFT/RIGHT не следует останавливать. Затем я должен получить каждый вид/виджет, чтобы реализовать свой собственный onKeyDown/Up, который является утомительным. Есть ли более простой способ сделать это? Спасибо.

Теги:
view
focus
keyevent

1 ответ

1
Лучший ответ

После проверки исходного кода, наконец, я получил следующее решение, очень простое,

@Override
public boolean executeKeyEvent(KeyEvent event) {
    return true;
}

Просто переопределите ScrollView:: executeKeyEvent и верните true

Ещё вопросы

Сообщество Overcoder
Наверх
Меню