android – 为什么不调用dispatchKeyEvent方法?

android – 为什么不调用dispatchKeyEvent方法?,第1张

概述我的活动将显示一个ShowcaseView,它添加到装饰视图((ViewGroup)activity.getWindow().getDecorView()).addView(mShowcaseView); ,我想检测关键事件来处理某些事情,所以我重写dispatchKeyEvent()来做我想要的.但似乎dispatchKeyEvent()方法永远不会被调用,更糟糕的是,PhoneWindow.D 我的活动将显示一个ShowcaseVIEw,它添加到装饰视图((VIEwGroup)activity.getwindow().getDecorVIEw()).addVIEw(mShowcaseVIEw);
,我想检测关键事件来处理某些事情,所以我重写dispatchKeyEvent()来做我想要的.但似乎dispatchKeyEvent()方法永远不会被调用,更糟糕的是,PhoneWindow.DecorVIEw#dispatchKeyEvent()既没有被调用,也不知道为什么,请帮助我.

@H_502_9@

谢谢.:)@H_502_9@

这是我的ShowcaseVIEw简要源代码.@H_502_9@

@H_502_9@

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);    }@OverrIDepublic 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:

@H_502_9@

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

要从屏幕键盘发送关键事件,您可以将textWatcher添加到editText.@H_502_9@

@H_502_9@

editText.addTextChangedListener(new TextWatcher() {            @OverrIDe            public voID beforeTextChanged(CharSequence charSequence,int i,int i1,int i2) {            }            @OverrIDe            public voID onTextChanged(CharSequence charSequence,int i2) {            }            @OverrIDe            public voID afterTextChanged(Editable editable) {            }        });

但我无法在您的代码段中看到输入字段.@H_502_9@ 总结

以上是内存溢出为你收集整理的android – 为什么不调用dispatchKeyEvent方法?全部内容,希望文章能够帮你解决android – 为什么不调用dispatchKeyEvent方法?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1123660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存