Android:如何使键盘输入按钮说“搜索”并处理其点击?


373

我不知道这个。某些应用程序具有EditText(文本框),当您触摸它时,它会弹出屏幕键盘,该键盘具有“搜索”按钮,而不是Enter键。

我要实现这个。如何实现该搜索按钮并检测是否按下了搜索按钮?

编辑:找到如何实现搜索按钮;XML android:imeOptions="actionSearch"或Java中EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);。但是,如何处理用户按下“搜索”按钮?有关系android:imeActionId吗?


3
请注意,imeOptions在某些设备上可能无法使用。看到这个这个
Ermolai 2013年

Answers:


904

在布局中,设置要搜索的输入法选项。

<EditText
    android:imeOptions="actionSearch" 
    android:inputType="text" />

在Java中添加编辑器操作侦听器。

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            performSearch();
            return true;
        }
        return false;
    }
});

82
在os 2.3.6上,直到我放置android:inputType =“ text”属性,它才起作用。
thanhbinh84 2011年

41
在Android 2.3.5和4.0.4上,我也需要android:inputType =“ text”
ccyrille 2012年

6
@Carol EditText是的子类TextView
howettl

13
4.4.0-4.4.2(Android Kitkat)也需要android:inputType =“ text”。
user818455 2014年

12
是的,在5.0中仍然需要android:inputType =“ text” :)
lionelmessi

19

用户单击搜索时隐藏键盘。除了Robby Pond答案

private void performSearch() {
    editText.clearFocus();
    InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
    //...perform search
}

7

xml文件中,把imeOptions="actionSearch"inputType="text"maxLines="1"

<EditText
    android:id="@+id/search_box"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="@string/search"
    android:imeOptions="actionSearch"
    android:inputType="text"
    android:maxLines="1" />

5

在科特林

evLoginPassword.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        doTheLoginWork()
    }
    true
}

部分Xml代码

 <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">
       <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginUserEmail"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/email"
                android:inputType="textEmailAddress"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>

        <android.support.design.widget.TextInputLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            android:layout_marginTop="8dp"
            android:paddingLeft="24dp"
            android:paddingRight="24dp">

            <EditText
                android:id="@+id/evLoginPassword"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:hint="@string/password"
                android:inputType="textPassword"
                android:imeOptions="actionDone"
                android:textColor="@color/black_54_percent" />
        </android.support.design.widget.TextInputLayout>
</LinearLayout>

1

这个答案是针对TextInputEditText的:

在布局XML文件中,将输入法选项设置为所需的类型。例如完成

<com.google.android.material.textfield.TextInputLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <com.google.android.material.textfield.TextInputEditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:imeOptions="actionGo"/>

同样,您也可以将imeOptions设置为actionSubmit,actionSearch等

在Java中添加编辑器操作侦听器。

textInputLayout.getEditText().setOnEditorActionListener(new 

    TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_GO) {
                performYourAction();
                return true;
            }
            return false;
        }
    });

如果您使用的是kotlin:

textInputLayout.editText.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_GO) {
        performYourAction()
    }
    true
}

0

通过XML:

 <EditText
        android:id="@+id/search_edit"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="@string/search"
        android:imeOptions="actionSearch"
        android:inputType="text" />

通过Java:

 editText.clearFocus();
    InputMethodManager in = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
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.