Android:キーボードのEnterボタンに「検索」と言ってクリックを処理させる方法は?


373

これはわかりません。一部のアプリにはEditText(テキストボックス)があり、これをタッチして画面キーボードを起動すると、キーボードにはEnterキーの代わりに「検索」ボタンがあります。

これを実装したい。その検索ボタンを実装して、検索ボタンの押下を検出するにはどうすればよいですか?

編集:検索ボタンの実装方法を見つけました。XML android:imeOptions="actionSearch"またはJavaでEditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);。しかし、その検索ボタンを押したユーザーをどのように処理すればよいでしょうか 何か関係がありandroid:imeActionIdますか?


3
一部のデバイスではimeOptionsが機能しない場合があることに注意してください。これこれを見てください。
Ermolai 2013年

回答:


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

41
Android 2.3.5および4.0.4では、android:inputType = "text"も必要でした
cyyrille

6
@CarolはのサブクラスEditTextですTextView
howettl 2013

13
android:inputType = "text"は、4.4.0〜4.4.2(Android Kitkat)にも必要です。
user818455 2014年

12
うん、android:inputType = "text"は5.0でも必要です:)
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);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.