【问题标题】:Difference between onKey(), OnKeyDown() and dispatchKeyEvent() methods provided by Android?Android提供的onKey()、OnKeyDown()和dispatchKeyEvent()方法的区别?
【发布时间】:2011-12-12 08:41:03
【问题描述】:

Android提供的onKey()、OnKeyDown()和dispatchKeyEvent()方法有什么区别?
我想知道这些可以在何时何地使用。
请对此有所了解。

【问题讨论】:

    标签: android events key


    【解决方案1】:

    追踪5.1 Source for the View Class的源代码。 dispatchKeyEvent() 似乎是系统调用的第一个方法。重载它将阻止调用任何和所有关键事件,除非调用基本版本。

    dispatchKeyEvent() 的第一步是尝试将事件传递给onKeyListener(如果有的话)。这是调用onKey() 的时间。如果onKey() 实现返回truedispatchKeyEvent() 将返回那里并且不会调用其他事件。

    如果没有onKeyListener或者onKeyListeneronKey()方法返回false,那么dispatchKeyEvent()就会调用KeyEventdispatch()方法。然后它将依次调用视图上KeyEvent.Callback 接口中的所有方法。这包括onKeyDown()onKeyUp()

    【讨论】:

    • 再好不过了!
    • 所以,我也可以只使用dispatchKeyEvent,而不是同时使用onKeyDownonKeyUp?这有什么缺点吗?我必须这样做,因为出于某种原因,大多数键都不会触发onKeyDown。当我更改为dispatchKeyEvent 时,它起作用了。
    • @keinabel 重载dispatchKeyEvent 是一个选项。但除非您调用基本版本,否则不会触发其他相关事件。在您的情况下,我的猜测是您的事件在调用KeyEvent.dispatch() 之前被onKeyListener 消耗,或者按键被dispatch() 方法视为onKeyMultiple 事件。
    【解决方案2】:

    DispatchKeyEvent 硬件关键事件总是传递给当前焦点所在的视图。它们从 View 层次结构的顶部开始调度,然后向下调度,直到它们到达适当的目的地。如果您的视图(或您的视图的子视图)当前具有焦点,那么您可以通过 dispatchKeyEvent() 方法看到事件的传播。简而言之,dispatchKeyEvent() 只有在 TextView/EditText 处于焦点时才会被调用。

    onKeyDown当一个键被按下并且没有被活动内部的任何视图处理时调用

    【讨论】:

      猜你喜欢
      • 2012-08-19
      • 1970-01-01
      • 1970-01-01
      • 2022-11-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多