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,这很乏味。有没有更简单的方法来做到这一点?谢谢。

4

1 回答 1

1

检查源代码后,最后我得到了以下解决方案,非常简单,

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

只需覆盖 ScrollView::executeKeyEvent 并返回 true

于 2011-05-26T09:08:01.700 回答