,我想检测关键事件来处理某些事情,所以我重写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方法?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)