使用软键盘上的“ ENTER”键,而不是单击按钮


94

您好,我已经EditText搜索了Button。输入搜索文本时,我想使用软键盘上的ENTER键而不是搜索Button来激活搜索功能。

预先感谢您的帮助。

Answers:


155

您可以通过在OnKeyListener上设置来实现EditText

这是我自己的代码中的示例。我有一个EditTextnamed addCourseTextaddCourseFromTextBox单击Enter键或d-pad时将调用该函数。

addCourseText = (EditText) findViewById(R.id.clEtAddCourse);
addCourseText.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:
                    addCourseFromTextBox();
                    return true;
                default:
                    break;
            }
        }
        return false;
    }
});

4
实际上,不能保证使用软键。例如,它不适用于Nexus 7(Android 4.2)上的“ ENTER”,而不适用于Nexus 7(Android 4.2)上的“ BACK”。
Ghedeon 2012年

4
@Ghedeon,您可以设置android:inputType="text"编辑文本的xml,以显示Enter键,而不显示具有回车符的默认键盘。
尼克

2
从Jellybean开始不保证该方法的有效性,请参阅developer.android.com/reference/android/view/KeyEvent.html
Constantin

@Ghedeon,那么如何在Nexus 7上将其用于“ ENTER”?
HairOfTheDog 2013年

3
该解决方案在包括Nexus 7在内的许多设备上都被完全打破。不要使用它!
user3562927

44
<EditText
    android:id="@+id/search"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search_hint"
    android:inputType="text"
    android:imeOptions="actionSend" />

然后,可以通过为EditText元素定义TextView.OnEditorActionListener来监听操作按钮上的按下。在您的侦听器中,响应在EditorInfo类中定义的相应IME操作ID,例如IME_ACTION_SEND。例如:

EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        boolean handled = false;
        if (actionId == EditorInfo.IME_ACTION_SEND) {
            sendMessage();
            handled = true;
        }
        return handled;
    }
});

来源:https : //developer.android.com/training/keyboard-input/style.html


26

可能是您可以像这样向您的EditText添加属性:

android:imeOptions="actionSearch"

1
如果要构建搜索编辑文本,这是更简单的解决方案。
stevyhacker

需要设置android:inputType="text"以及
LI2

6

向EditText添加一个属性,例如android:imeOptions =“ actionSearch”

这是执行功能的最佳方法

imeOptions还具有其他一些值,例如“ go”,“ next”,“ done”等。


2

我们也可以使用Kotlin lambda

editText.setOnKeyListener { _, keyCode, keyEvent ->
        if (keyEvent.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
            Log.d("Android view component", "Enter button was pressed")
            return@setOnKeyListener true
        }
        return@setOnKeyListener false
    }

0

为了避免将焦点移到下一个可编辑字段(如果有),您可能要忽略按下事件,但要处理按下事件。我也更喜欢先对keyCode进行过滤,假设这样做会稍微提高效率。顺便说一句,请记住,返回true意味着您已经处理了该事件,因此没有其他侦听器会这样做。无论如何,这是我的版本。

ETFind.setOnKeyListener(new OnKeyListener()
{
    public boolean onKey(View v, int keyCode, KeyEvent event)
    {
        if (keyCode ==  KeyEvent.KEYCODE_DPAD_CENTER
        || keyCode ==  KeyEvent.KEYCODE_ENTER) {

            if (event.getAction() == KeyEvent.ACTION_DOWN) {
                // do nothing yet
            } else if (event.getAction() == KeyEvent.ACTION_UP) {
                        findForward();      
            } // is there any other option here?...

            // Regardless of what we did above,
            // we do not want to propagate the Enter key up
            // since it was our task to handle it.
            return true;

        } else {
            // it is not an Enter key - let others handle the event
            return false;
        }
    }

});

0

这是我如何处理我的一个应用程序的示例

 //searching for the Edit Text in the view    
    final EditText myEditText =(EditText)view.findViewById(R.id.myEditText);
        myEditText.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                 if (event.getAction() == KeyEvent.ACTION_DOWN)
                      if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
                             (keyCode == KeyEvent.KEYCODE_ENTER)) {
                                //do something
                                //true because you handle the event
                                return true;
                               }
                       return false;
                       }
        });

0

实现此目的的最新方法是:

将此添加到XML的EditText中:

android:imeOptions="actionSearch"

然后在您的活动/片段中:

EditText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_SEARCH) {
        // Do what you want here
        return@setOnEditorActionListener true
    }
    return@setOnEditorActionListener false
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.