Android:EditText 的 KeyListener 不接收密钥

Posted

技术标签:

【中文标题】Android:EditText 的 KeyListener 不接收密钥【英文标题】:Android: KeyListener for an EditText not receiving keys 【发布时间】:2011-07-30 01:24:54 【问题描述】:

我有一个要监视 KeyEvents 的 EditText,并且我有一个侦听器设置如下:

mText = (EditText) this.findViewById(R.id.title);
mText.setOnKeyListener(new OnKeyListener() 
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) 
        final int view = v.getId();
        switch (view) 
            case R.id.title:
                Log.d(LOG_TAG, "key handled");
                break;
        
        return false;
    
);

我的问题是,当使用虚拟键盘输入 EditText 时,触发记录的唯一按键是退格键。我已经验证所有其他按键甚至都没有触发onKey()。我确定这很简单,但在 SO 上没有找到任何似乎可以解决此问题的内容。

谢谢,

保罗

【问题讨论】:

来自文档Key presses on soft input methods are not required to trigger the methods in this listener, and are in fact discouraged to do so. The default android keyboard will not trigger these for any key to any application targetting Jelly Bean or later, and will only deliver it for some key presses to applications targetting Ice Cream Sandwich or earlier.developer.android.com/reference/android/text/method/… 【参考方案1】:

onKeyListener 仅适用于:

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

onCreate方法中设置。

【讨论】:

【参考方案2】:

来自 Android 参考:

http://developer.android.com/reference/android/view/View.OnKeyListener.html

View.OnKeyListener

类概述 将硬件按键事件分派到此视图时要调用的回调的接口定义。将在将键事件提供给视图之前调用回调。这仅对硬件键盘有用; 软件输入法没有义务触发这个监听器。

似乎 OnKeyListener 专门设计为仅对硬件键作出反应!

【讨论】:

【参考方案3】:

尝试使用addTextChangedListener(TextWatcher watcher) 定义的here 来处理物理键盘和软键盘。 希望对你有帮助

【讨论】:

这正是我正在寻找的 - 关键监听器的行为仍然很奇怪,但谢谢。

以上是关于Android:EditText 的 KeyListener 不接收密钥的主要内容,如果未能解决你的问题,请参考以下文章

android editText 监听事件

Android常见控件— — —EditText

android EditText焦点问题

android的edittext怎么设置不默认被选中

Android EditText 操作。。。

自己定义绘制android EditText的背景,定义EditText文字的显示样式