【问题标题】:How to catch soft keyboard "ENTER"如何捕捉软键盘“ENTER”
【发布时间】:2016-09-07 21:15:02
【问题描述】:

我正在开发一个聊天应用程序,并且正在寻找一种在消息编辑期间(在 EditText 中)在软键盘上按下 ENTER 的方法。目的是直接发送文本。 显然我也实现了一个“发送”按钮。

两次尝试:

  1. 使用editText.addTextChangedListener(new TextWatcher()..

    结果:我在 onTextChanged 和 afterTextChanged 中得到“\n”字符
    回调。我可以“删除”这个角色并发送聊天,但我不喜欢
    这边。

  2. 使用editText.setOnEditorActionListener(new TextView.OnEditorActionListener()..

    结果:它不起作用。

有更好的解决方案吗?

【问题讨论】:

  • 在上面的链接中,选择的答案摘录:“..setOnEditorActionListener() 方法,全部在 TextView 上”,但我使用的是 EditText
  • 你看过所有著名的聊天应用程序吗?我只看了脸书 Messagner、Whatsapp、IMO 和 Skype。它们都在应用程序中提供了一个单独的发送按钮。现在按照@Amy 的建议添加android:imeOptions="actionSend" 可能会为您提供实现所需内容的方法(我从未尝试过),但您将无法在聊天中添加新行。

标签: android


【解决方案1】:

我用它来捕捉软键盘输入,效果很好,但我不确定这是否适合你:

editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
        if (keyCode == KeyEvent.KEYCODE_ENTER && keyEvent.getAction() == KeyEvent.ACTION_UP) {
            //do something.
            return true;
        }
        return false;
    }
});

【讨论】:

    【解决方案2】:

    试试这个;

    editText.setOnKeyListener(new OnKeyListener()
    {
        public boolean onKey(View v, int keyCode, KeyEvent event)
        {
            if (event.getAction() == KeyEvent.ACTION_DOWN)
            {
                switch (keyCode)
                {
                    case KeyEvent.KEYCODE_DPAD_CENTER:
                    case KeyEvent.KEYCODE_ENTER:
                        //Perform Your action
                        return true;
                    default:
                        break;
                }
            }
            return false;
        }
    });
    

    【讨论】:

    • 但是,来自 Android 开发者:“当硬件按键事件被调度到这个视图时,回调的接口定义。回调将在按键事件被分配给视图之前被调用。这个仅对硬件键盘有用;软件输入法没有义务触发此侦听器。”我需要关于软键盘的建议。
    • 那么你可以在xml中使用android:imeOptions="actionSend"
    • 永远不会工作,你无法在android中获取软键盘输入事件
    猜你喜欢
    • 2011-11-30
    • 2011-03-03
    • 1970-01-01
    • 2013-01-09
    • 2012-09-30
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多