Android: как предотвратить смена фокуса при нажатии клавиши навигации? - PullRequest
1 голос
/ 25 мая 2011

По какой-то особой причине я должен управлять фокусом сам.
В эмуляторе 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, что утомительно. Есть ли более простой способ сделать это? Спасибо.

1 Ответ

1 голос
/ 26 мая 2011

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

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

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

...