【问题标题】:OnEditorActionListener not workingOnEditorActionListener 不工作
【发布时间】:2013-04-09 12:26:42
【问题描述】:

我只是想在用户在 editText 上按 enter 时捕捉事件。

我没有收到 Toast 消息,不是“按下 Enter”,也不是“按下了某个键!”要么。

我做错了什么?

myEditText.setOnEditorActionListener(new OnEditorActionListener() {

    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

   Toast.makeText(getApplicationContext(), "Some key pressed!", Toast.LENGTH_LONG).show();

        if (event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
             Toast.makeText(getApplicationContext(), "Enter pressed", Toast.LENGTH_LONG).show();
                return true;
                }
                return false;
            }
        });

编辑:

嗯,它适用于 Android 2.3.3 而不适用于 4.1.2 有什么想法可以让我在任何安卓设备上使用吗?

【问题讨论】:

  • 您可以使用 TextWatcher 处理与 Edittext 相关的任何事件

标签: android android-edittext


【解决方案1】:

请尝试将EditText设置为单行模式。

editText.setSingleLine();

或在您的 xml 布局文件中:

android:singleLine="true"

更新

android:singleLine="true" 已弃用。从现在开始,使用android:maxLines="1"android:inputType="text" 来实现此行为

editText.setMaxLines(1);
editText.setInputType(InputType.TYPE_CLASS_TEXT);

用于以编程方式设置。

【讨论】:

  • 其他输入类型也可以使用(我认为如果它们阻止换行符),例如“textPersonName”
  • @CameronKetcham:确实如此。 “InputType.TYPE_TEXT_VARIATION_PASSWORD”也可以使用
  • 上帝你救了我的一天!
  • 不确定这是旧信息,但它不适用于我的 Nexus 6p 7.1
【解决方案2】:

在 xml 中使用 android:imeOptions="actionGo"actionDone 不再回复 onEditorAction

【讨论】:

    【解决方案3】:

    android:inputType="text"android:imeOptions="actionGo" 创造奇迹。

    【讨论】:

      【解决方案4】:

      对我来说问题是我在 XML 中设置了android:inputType="textMultiline"。当我删除 textMultiline 选项时,EditorListener 开始工作。

      【讨论】:

        【解决方案5】:
        myEditText.setOnEditorActionListener(new OnEditorActionListener() {
        
        public boolean onEditorAction(TextView arg0, int arg1, KeyEvent arg2) {
            Toast.makeText(getApplicationContext(), "some key pressed", Toast.LENGTH_LONG)
                                .show();
            return false;
        }
        });
        

        在我的编辑文本中输入内容后,当按下回车键时,此代码会显示按下某些键。但我不知道你的代码有什么问题。

        【讨论】:

          【解决方案6】:

          我不知道为什么 Atul Chatuverdi 的回答被否决了——经过大量浏览后,这个答案终于给了我一个“奇迹”。

          我确认 ActionDone 可能不起作用。它适用于我的三星,但由于某种原因不适用于 Fly S。该事件没有被触发。两者都是Android 7.1。不知道是不是谷歌键盘的bug……

          我用来让它最终在所有设备上运行的代码是

          <EditText   
               android:singleLine="true"
               android:inputType="textUri"
               android:maxLines="1"
               android:imeOptions="actionGo"          
               ...
               android:id="@+id/et_path"
               android:layout_width="match_parent"
               android:layout_height="wrap_content"
              />
          

          (您可以使用 text 代替 textUri,具体取决于您的需要)。

          在我的片段中:

          editText = view.findViewById(R.id.et_path);
          ...
          editText.setOnEditorActionListener(new onGo());
          

          以及处理动作的嵌套类。

          private class onGo implements TextView.OnEditorActionListener {
             @Override
             public boolean onEditorAction(TextView textView, int i, KeyEvent keyEvent) {
              if (i == EditorInfo.IME_ACTION_GO) {
          
                   // To do stuff
                  return true;
              }
              return false;
             }
            }
          

          对于多行文本中的if (event != null &amp;&amp; (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)),我也有同样的问题。它适用于三星键盘、黑客键盘,但不适用于谷歌键盘。

          由于各种原因(例如粘贴带有输入符号的文本而不是按输入按钮等),建议不要使用 textwatcher。

          【讨论】:

            猜你喜欢
            • 2017-07-30
            • 1970-01-01
            • 2021-11-13
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-10
            • 1970-01-01
            • 2019-01-19
            相关资源
            最近更新 更多