android - 为什么没有调用 View dispatchKeyEvent 方法?

标签 android keyevent

我的 Activity 将显示一个添加到装饰 View 的 ShowcaseView((ViewGroup) activity.getWindow().getDecorView()).addView(mShowcaseView); ,我想检测关键事件来处理某些事情,所以我覆盖了 dispatchKeyEvent() 来做我想做的事。但似乎 dispatchKeyEvent() 方法从未被调用,更糟糕的是,PhoneWindow.DecorView#dispatchKeyEvent() 都没有被调用,我不知道为什么,请帮助我.

谢谢。:)

这是我的 ShowcaseView 简要源代码。

public class ShowcaseView extends FrameLayout {
    public ShowcaseView(Context context) {
        super(context);
        init(context);
    }

    public ShowcaseView(Context context, AttributeSet attrs) {
       super(context, attrs);
       init(context);
    }

    public ShowcaseView(Context context, AttributeSet attrs, int defStyleAttr) {
       super(context, attrs, defStyleAttr);
       init(context);
    }

    private void init(Context context) {
        setWillNotDraw(false);
        setDescendantFocusability(FOCUS_AFTER_DESCENDANTS);
        setFocusable(true);
        setEnabled(true);
    }

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    Log.d("Showcase", "dispatchKeyEvent: called");
    super.dispatchKeyEvent(event);
    return executeKeyEvent(event);
}

private boolean executeKeyEvent(KeyEvent event) {
    if (event.getAction() == KeyEvent.ACTION_UP
            && event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER) {
        hide();
    }
    return true;
}
}

最佳答案

根据https://developer.android.com/training/keyboard-input/commands.html :

注意:在使用 KeyEvent 类和相关 API 处理键盘事件时,您应该期望此类键盘事件仅来自硬件键盘。您永远不应依赖于接收软输入法(屏幕键盘)上任何键的键事件。

要从屏幕键盘发送按键事件,您可以将 textWatcher 添加到 editText。

editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {

            }

            @Override
            public void afterTextChanged(Editable editable) {

            }
        });

但我在您的代码 fragment 中看不到输入字段。

关于android - 为什么没有调用 View dispatchKeyEvent 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34126506/

相关文章:

android - 尽快将 PageTransformer 应用到 PagerView

javascript - 操作系统独立的键盘事件到字符映射

java - 如何以编程方式将按键事件发送到 Java 应用程序中的任何窗口/进程?

c# - 无法捕获回车键

android - 为什么我无法使用 google map V2

android - 如何验证 EditText 不接受小于 android studio 中的最大长度值

java - libgdx 游戏在一段时间后开始卡住

android - 约束布局 ListView 在键盘出现时移动

java - 如何从另一个类(class)获取 Keyevent?

C# 控制台按键事件