Câu trả lời:
Bạn làm điều đó bằng cách thiết lập một OnKeyListener
trên của bạn EditText
.
Đây là một mẫu từ mã của riêng tôi. Tôi có một EditText
cái tên được đặt tên addCourseText
, hàm này sẽ gọi hàm addCourseFromTextBox
khi nhấn phím enter hoặc phím 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 cho văn bản chỉnh sửa để hiển thị phím enter so với bàn phím mặc định có dấu xuống dòng.
<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" />
Sau đó, bạn có thể lắng nghe các lần nhấn vào nút hành động bằng cách xác định TextView.OnEditorActionListener cho phần tử EditText. Trong bộ lắng nghe của bạn, hãy trả lời ID hành động IME thích hợp được xác định trong lớp EditorInfo, chẳng hạn như IME_ACTION_SEND. Ví dụ:
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;
}
});
Nguồn: https://developer.android.com/training/keyboard-input/style.html
Có thể bạn có thể thêm một thuộc tính vào EditText của mình như thế này:
android:imeOptions="actionSearch"
android:inputType="text"
cũng
Chúng tôi cũng có thể sử dụng 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
}
Để tránh tiêu điểm chuyển sang trường có thể chỉnh sửa tiếp theo (nếu bạn có), bạn có thể muốn bỏ qua các sự kiện từ khóa xuống nhưng xử lý các sự kiện từ khóa lên. Tôi cũng thích lọc trước trên Mã khóa, giả sử rằng nó sẽ hiệu quả hơn một chút. Nhân tiện, hãy nhớ rằng trả về true có nghĩa là bạn đã xử lý sự kiện, vì vậy sẽ không có người nghe nào khác. Dù sao, đây là phiên bản của tôi.
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;
}
}
});
đây là ví dụ về một trong những ứng dụng của tôi, cách tôi xử lý
//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;
}
});
Cách cập nhật nhất để đạt được điều này là:
Thêm cái này vào EditText của bạn trong XML:
android:imeOptions="actionSearch"
Sau đó, trong Activity / Fragment của bạn:
EditText.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
// Do what you want here
return@setOnEditorActionListener true
}
return@setOnEditorActionListener false
}