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