Android: วิธีทำให้ปุ่มกดบนแป้นพิมพ์พูดว่า "ค้นหา" และจัดการกับการคลิก


373

ฉันไม่สามารถเข้าใจได้ แอพบางตัวมี EditText (textbox) ซึ่งเมื่อคุณสัมผัสมันจะปรากฏขึ้นบนแป้นพิมพ์บนหน้าจอแป้นพิมพ์จะมีปุ่ม "ค้นหา" แทนที่จะเป็นปุ่ม Enter

ฉันต้องการใช้สิ่งนี้ ฉันจะใช้ปุ่มค้นหานั้นและตรวจจับการกดปุ่มค้นหาได้อย่างไร

แก้ไข : พบวิธีใช้ปุ่มค้นหา ในรูปแบบ XML, หรือในandroid:imeOptions="actionSearch" Java EditTextSample.setImeOptions(EditorInfo.IME_ACTION_SEARCH);แต่ฉันจะจัดการกับผู้ใช้โดยการกดปุ่มค้นหาได้อย่างไร มันมีบางอย่างเกี่ยวข้องกับandroid:imeActionId?


3
โปรดทราบว่า imeOptions อาจไม่ทำงานในอุปกรณ์บางอย่าง ดูนี้และนี้
Ermolai

คำตอบ:


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
ในระบบปฏิบัติการ 2.3.6 มันไม่ทำงานจนกว่าฉันจะใส่ Android: คุณลักษณะ inputType = "text"
thanhbinh84

41
android: inputType = "text" เป็นสิ่งจำเป็นสำหรับฉันบน Android 2.3.5 และ 4.0.4
ccyrille

6
@Carol เป็นชั้นย่อยของEditText TextView
howettl

13
android: inputType = "text" เป็นสิ่งจำเป็นสำหรับ 4.4.0 - 4.4.2 (Android Kitkat)
user818455

12
Yup, 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.