สวัสดีฉันมีการสืบค้นและการค้นหาEditText
Button
เมื่อฉันพิมพ์ข้อความที่ค้นหาฉันต้องการใช้ปุ่มENTERบนซอฟต์คีย์บอร์ดแทนการค้นหาButton
เพื่อเปิดใช้งานฟังก์ชันการค้นหา
ขอบคุณสำหรับความช่วยเหลือล่วงหน้า
สวัสดีฉันมีการสืบค้นและการค้นหาEditText
Button
เมื่อฉันพิมพ์ข้อความที่ค้นหาฉันต้องการใช้ปุ่มENTERบนซอฟต์คีย์บอร์ดแทนการค้นหาButton
เพื่อเปิดใช้งานฟังก์ชันการค้นหา
ขอบคุณสำหรับความช่วยเหลือล่วงหน้า
คำตอบ:
คุณทำได้โดยการตั้งค่าOnKeyListener
บนEditText
ไฟล์.
นี่คือตัวอย่างจากโค้ดของฉันเอง ฉันมีEditText
ชื่อaddCourseText
ซึ่งจะเรียกใช้ฟังก์ชันaddCourseFromTextBox
เมื่อคลิกปุ่ม Enter หรือ d-pad
addCourseText = (EditText) findViewById(R.id.clEtAddCourse);
addCourseText.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
case KeyEvent.KEYCODE_ENTER:
addCourseFromTextBox();
return true;
default:
break;
}
}
return false;
}
});
android:inputType="text"
xml สำหรับข้อความแก้ไขเพื่อแสดงแป้น Enter เทียบกับแป้นพิมพ์เริ่มต้นที่มีการคืนค่าขนส่ง
<EditText
android:id="@+id/search"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="@string/search_hint"
android:inputType="text"
android:imeOptions="actionSend" />
จากนั้นคุณสามารถฟังการกดบนปุ่มการดำเนินการโดยกำหนด TextView OnEditorActionListener สำหรับองค์ประกอบ EditText ใน Listener ของคุณให้ตอบกลับ ID การดำเนินการ IME ที่เหมาะสมซึ่งกำหนดไว้ในคลาส EditorInfo เช่น IME_ACTION_SEND ตัวอย่างเช่น:
EditText editText = (EditText) findViewById(R.id.search);
editText.setOnEditorActionListener(new OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
boolean handled = false;
if (actionId == EditorInfo.IME_ACTION_SEND) {
sendMessage();
handled = true;
}
return handled;
}
});
ที่มา: https://developer.android.com/training/keyboard-input/style.html
คุณอาจเพิ่มแอตทริบิวต์ใน EditText ของคุณได้ดังนี้:
android:imeOptions="actionSearch"
android:inputType="text"
เช่นกัน
เพิ่มแอตทริบิวต์ใน EditText เช่น android: imeOptions = "actionSearch"
นี่คือวิธีที่ดีที่สุดในการทำหน้าที่
และ imeOptions ยังมีค่าอื่น ๆ เช่น "go"、 "next"、 "done" เป็นต้น
เรายังสามารถใช้ Kotlin lambda
editText.setOnKeyListener { _, keyCode, keyEvent ->
if (keyEvent.action == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
Log.d("Android view component", "Enter button was pressed")
return@setOnKeyListener true
}
return@setOnKeyListener false
}
เพื่อหลีกเลี่ยงไม่ให้โฟกัสเลื่อนไปยังช่องถัดไปที่แก้ไขได้ (ถ้าคุณมี) คุณอาจต้องการละเว้นเหตุการณ์การกดแป้นลง แต่จัดการเหตุการณ์สำคัญ ฉันชอบกรองบน keyCode เป็นอันดับแรกโดยสมมติว่ามันจะมีประสิทธิภาพมากกว่าเล็กน้อย อย่างไรก็ตามอย่าลืมว่าการกลับมาเป็นจริงหมายความว่าคุณได้จัดการเหตุการณ์แล้วดังนั้นจึงไม่มีผู้ฟังคนอื่น ๆ อย่างไรก็ตามนี่คือเวอร์ชันของฉัน
ETFind.setOnKeyListener(new OnKeyListener()
{
public boolean onKey(View v, int keyCode, KeyEvent event)
{
if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER
|| keyCode == KeyEvent.KEYCODE_ENTER) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// do nothing yet
} else if (event.getAction() == KeyEvent.ACTION_UP) {
findForward();
} // is there any other option here?...
// Regardless of what we did above,
// we do not want to propagate the Enter key up
// since it was our task to handle it.
return true;
} else {
// it is not an Enter key - let others handle the event
return false;
}
}
});
นี่คือตัวอย่างหนึ่งในแอปของฉันที่ฉันจัดการ
//searching for the Edit Text in the view
final EditText myEditText =(EditText)view.findViewById(R.id.myEditText);
myEditText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN)
if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) ||
(keyCode == KeyEvent.KEYCODE_ENTER)) {
//do something
//true because you handle the event
return true;
}
return false;
}
});
วิธีที่อัปเดตที่สุดในการบรรลุเป้าหมายนี้คือ:
เพิ่มสิ่งนี้ใน EditText ของคุณใน XML:
android:imeOptions="actionSearch"
จากนั้นในกิจกรรม / ส่วนของคุณ:
EditText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// Do what you want here
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}