繁体   English   中英

Android - 处理虚拟和物理键盘事件

[英]Android - handle virtual & physical keyboard events

在阅读了几个类似问题的答案之后*我确实意识到onKeyListener()没有从软(虚拟)键盘获得按键事件。 它只能从硬(物理)键盘获取它们。 解决方法是使用TextWatcher或onKeyboardActionListener。 我有以下问题:

(1)有没有办法能够通过实现一个监听器从任何键盘(软或硬)听按键? 或基本上是一个适用于两者的API?

(2)TextWatcher或onKeyboardActionListener与onKeyListener()的onKey()方法不同,不传递当前具有焦点的视图(用户正在键入输入)。 那么,如果我要使用TextWatcher或onKeyboardActionListener,如何获得当前关注的视图? 我需要这个能够在EditText上设置一些属性,用户根据输入键入他们的输入。

*相关问题: onKeyListener无法使用虚拟键盘onKeyListener无法使用软键盘(Android)Android:为什么我的OnKeyListener()没有被调用?

谢谢!

我有同样的问题。 并且假设没有好的方法来实现处理软键盘事件的解决方案。 我已经为delete事件实现了onKeyListener() ,为keys事件实现了onKeyListener()

m_edtRecipients.addTextChangedListener(new TextWatcher() {
        boolean bConsumed = false;

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            if (!bConsumed) {
                RecipientsTextStyle.format(m_edtRecipients.getText(), m_dbProcessor);
            }
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            if (count != 0) {
                bConsumed = true;
                Log.d(TAG, "delete true");
            } else {
                bConsumed = false;
                Log.d(TAG, "erase false");
            }
        }

        @Override
        public void afterTextChanged(Editable s) {

        }
    });

TextWatcher方法有一个很大的缺点 - 您无法更改EditText链接的可编辑 - 它将导致循环。 小心!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM