По какой-то особой причине я должен сам управлять фокусом.
В эмуляторе для перемещения фокуса были назначены 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, который является утомительным.
Есть ли более простой способ сделать это?
Спасибо.
После проверки исходного кода, наконец, я получил следующее решение, очень простое,
@Override
public boolean executeKeyEvent(KeyEvent event) {
return true;
}
Просто переопределите ScrollView:: executeKeyEvent и верните true