Android: bagaimana membuat tombol enter keyboard mengatakan "Cari" dan menangani kliknya?


373

Saya tidak tahu ini. Beberapa aplikasi memiliki EditText (kotak teks) yang, ketika Anda menyentuhnya dan memunculkan keyboard di layar, keyboard memiliki tombol "Cari" daripada tombol enter.

Saya ingin mengimplementasikan ini. Bagaimana saya bisa menerapkan tombol Pencarian itu dan mendeteksi tekan tombol Cari?

Sunting : ditemukan cara menerapkan tombol Pencarian; dalam XML, android:imeOptions="actionSearch"atau di Jawa EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);,. Tetapi bagaimana saya menangani pengguna dengan menekan tombol Cari itu? Apakah ada hubungannya dengan android:imeActionId?


3
Perhatikan bahwa imeOptions mungkin tidak berfungsi pada beberapa perangkat. Lihat ini dan ini .
Ermolai

Jawaban:


904

Dalam tata letak setel opsi metode input Anda untuk mencari.

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

Di java tambahkan pendengar tindakan editor.

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
Pada os 2.3.6 tidak berfungsi sampai saya meletakkan atribut android: inputType = "text".
thanhbinh84

41
android: inputType = "text" juga diperlukan untuk saya di Android 2.3.5 dan 4.0.4
ccyrille

6
@Carol EditTextadalah sub kelas dari TextView.
howettl

13
android: inputType = "text" juga diperlukan untuk 4.4.0 - 4.4.2 (Android Kitkat).
user818455

12
Yup, android: inputType = "text" masih diperlukan di 5.0 :)
lionelmessi

19

Sembunyikan keyboard saat pengguna mengklik pencarian. Selain jawaban Robby Pond

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

7

Dalam xmlberkas, menempatkan imeOptions="actionSearch"dan 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

Di Kotlin

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

Kode Xml Parsial

 <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

Jawaban ini untuk TextInputEditText:

Dalam tata letak file XML atur opsi metode input Anda ke jenis yang diperlukan. misalnya selesai .

<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"/>

Demikian pula, Anda juga dapat mengatur imeOptions ke actionSubmit, actionSearch, dll

Di java tambahkan pendengar tindakan editor.

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;
        }
    });

Jika Anda menggunakan kotlin:

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

0

oleh 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" />

Menurut jawa:

 editText.clearFocus();
    InputMethodManager in = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.