【问题标题】:KeyPress event only fires on certain keys in MonoDroidKeyPress 事件仅在 MonoDroid 中的某些键上触发
【发布时间】:2012-02-29 21:53:59
【问题描述】:

我有一个提供搜索建议的自定义搜索活动。我得到了对搜索输入框的引用并设置了一个处理程序:

mSearchInput = FindViewById(Resource.Id.searchBoxInput) as EditText;
mSearchInput.KeyPress += new System.EventHandler<View.KeyEventArgs>(OnSearchKeypress);

这是应该在每次按键时调用的处理程序:

private void OnSearchKeypress(object sender, View.KeyEventArgs e) {
    string query = mSearchInput.Text;
    if (e.KeyCode == Keycode.Enter && !string.IsNullOrEmpty(query)) {
        e.Handled = true;
        // launch search results activity
    }
    else {
        e.Handled = false;
        if (query.Length > 2) {
            // load suggestions if we have 2+ characters
        }
    }
}

出于某种原因,在软键盘上,只有某些按键才会触发事件。 Enter 和 Delete 触发事件。字母数字键没有。即使我取出所有逻辑并简单地使用 e.KeyCode.ToString() 进行 Toast,它也只会显示这几个键上的 toast。

我是在监听错误的事件,这是一个错误,还是我犯了其他错误?

设备:机器人 X2 单声道版本:4.0.4

更新:我发现每次物理按键都会触发 KeyPress 两次:一次用于 KeyEventActions.Up,一次用于 Down。这并不能解释为什么只有某些键会触发事件,但需要注意的是,您需要检查 event.E.Action 以了解当前是否按下或释放触发了事件。

【问题讨论】:

    标签: c# xamarin.android keyboard-events


    【解决方案1】:

    事件何时不触发?如果是在用户键入时,则可以使用 TextChanged 事件。然后,您可以继续在 OnKey 方法中实现。

    另外,请看这篇文章的“搜索”按钮:

    http://www.stackoverflow.com/questions/1489852/android-handle-enter-in-an-edittext

    【讨论】:

    • 另外,一个EditText也是一个TextView,所以你可以看看那里。
    • 该事件仅在您按下删除、回车和硬件返回按钮时触发。 TextChanged 确实有效,但 KeyPress 事件仅在几个选择键上触发似乎是一个错误。实现两个侦听器来处理它似乎是不好的模式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多