【问题标题】:Android: how to prevent foucs change while press navigation key?Android:如何防止在按下导航键时改变焦点?
【发布时间】:2011-05-25 09:19:47
【问题描述】:

由于某些特殊原因,我必须自己管理注意力。
在模拟器中,KeyEvent.KEYCODE_DPAD_DOWNUP 被分配来移动焦点。为了把事情做好,我的原型如下所示

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

【问题讨论】:

    标签: android view focus keyevent


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 1970-01-01
      相关资源
      最近更新 更多