gpt4 book ai didi

android - 收听 Android 中的 ENTER 键

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:18:30 25 4
gpt4 key购买 nike

这是我的代码:

public class CaptureENTER extends Activity implements OnKeyListener{

/* on create and other stuff in here*/

@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
Toast.makeText(LiVoiceActivity.this,
"YOU CLICKED ENTER KEY",
Toast.LENGTH_LONG).show();

}
return false;
}

我不知道发生了什么,但是当我按下键盘上的 ENTER 键时(我使用的是 Android 模拟器),事件未激活

我错过了什么?

最佳答案

返回 true 不是问题。

您失败了,因为您必须将监听器设置为 View,而不仅仅是 Activity

为澄清而编辑:

监听器的返回值不应被理解为事件将被调用或将不会被调用的信号。而且它无论如何也不能,因为 return 子句仅在 您的 Toast 显示后被调用。

这是向系统发出的信号,表明需要采取进一步的行动(返回 false),或者该方法已完全正确地处理事件(返回 true)。这就是为什么 documentation用这些话来说:

Returns

True if the listener has consumed the event, false otherwise.


有以下区别:

  • 在您的 Activity 类中实现 View.OnKeyListener 接口(interface)

这允许您的 Activity 实现您的类中的接口(interface)提供的功能,即向世界声明您的 Activity知道如何处理此类事件。

请注意我说的是“declare”。仅仅因为您声明您知道如何处理一项任务并不意味着人们会将该任务交给您,也不意味着您可以自己生成此类任务。在我看来,这是对 implements 关键字的一个很好的比喻。这里的 Activity“请求任务”。

撇开隐喻不谈,从技术上讲,Activity 正在定义一种处理该事件的方法,但它无法自行生成此类事件。

  • View 回调设置为您的 Activity 实现

使用它,一个 View 绑定(bind)到一个监听器(恰好是您的 Activity), promise 在事件发生时通知它。

它与您的 Activity“签约”以接收输入(用户在 View 处于焦点时按下 ENTER 键)并通知 Activity。由于 Activity 之前声明它有能力执行该操作,双方 双方都可以按照之前约定的方式执行契约(Contract)(请参阅上一项)。

再次抛开隐喻,从技术上讲,这里的 ActivityView 注册,稍后当 View 触发事件。 Activity 声明如何,但View 知道何时

结论:

这只是interface 的一个隐喻(至少在这种情况下)。它可能看起来很复杂,但是当您将其视为两方协议(protocol)时,它就非常清楚了。如果您需要更好的技术解释,我建议您阅读有关interface的内容。


新评论问题的回答:

Hello David and everyone else. Really I can't set a listener to the whole Activity?

不是那样的。您需要覆盖 dispatchKeyEvent。一个例子:

@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
Toast.makeText(UITestsActivity.this,
"YOU CLICKED ENTER KEY",
Toast.LENGTH_LONG).show();
return true;
}
return super.dispatchKeyEvent(e);
};

关于android - 收听 Android 中的 ENTER 键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11237731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com