Android: làm thế nào để tạo nút nhập bàn phím có thể nói là Tìm kiếm Tìm kiếm và xử lý nhấp chuột của nó?


373

Tôi không thể tìm ra điều này. Một số ứng dụng có EditText (hộp văn bản), khi bạn chạm vào nó và nó hiện lên bàn phím trên màn hình, bàn phím có nút "Tìm kiếm" thay vì phím enter.

Tôi muốn thực hiện điều này. Làm cách nào tôi có thể triển khai nút Tìm kiếm đó và phát hiện nhấn nút Tìm kiếm?

Chỉnh sửa : tìm thấy cách thực hiện nút Tìm kiếm; trong XML android:imeOptions="actionSearch"hoặc trong Java , EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);. Nhưng làm cách nào để xử lý người dùng nhấn nút Tìm kiếm đó? Nó có cái gì để làm với android:imeActionId?


3
Lưu ý rằng imeOptions có thể không hoạt động trên một số thiết bị. Xem nàynày .
Ermolai

Câu trả lời:


904

Trong bố trí đặt tùy chọn phương thức nhập của bạn để tìm kiếm.

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

Trong java thêm trình lắng nghe hành động biên tập.

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
Trên os 2.3.6, nó không hoạt động cho đến khi tôi đặt thuộc tính android: inputType = "text".
thanhbinh84

41
android: inputType = "text" cũng được yêu cầu đối với tôi trên Android 2.3.5 và 4.0.4
ccyrille

6
@Carol EditTextlà một lớp con của TextView.
howettl

13
android: inputType = "text" cũng được yêu cầu cho 4.4.0 - 4.4.2 (Android Kitkat).
dùng818455

12
Yup, android: inputType = "text" vẫn cần thiết trong 5.0 :)
Lionelmessi

19

Ẩn bàn phím khi người dùng nhấp vào tìm kiếm. Ngoài câu trả lời của Robby Pond

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

7

Trong xmltập tin, đặt 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

Ở Kotlin

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

Mã Xml một phần

 <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

Câu trả lời này dành cho TextInputEditText:

Trong tệp XML bố trí, đặt các tùy chọn phương thức nhập của bạn thành loại được yêu cầu. ví dụ thực hiện .

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

Tương tự, bạn cũng có thể đặt imeOptions thành actionSubmit, actionSearch, v.v.

Trong java thêm trình lắng nghe hành động biên tập.

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

Nếu bạn đang sử dụng kotlin:

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

0

bằng 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" />

Bằng Java:

 editText.clearFocus();
    InputMethodManager in = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    in.hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.