Giải pháp Kotlin
Cách trực tiếp để xử lý bàn phím ẩn + hành động được thực hiện trong Kotlin là:
// Set action
edittext.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
// Hide Keyboard
val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
true
}
false
}
Gia hạn Kotlin
Sử dụng điều này để gọi edittext.onDone {/*action*/}
trong mã chính của bạn. Giữ cho nó dễ đọc và dễ bảo trì hơn
edittext.onDone { edittext.hideKeyboard() }
fun View.hideKeyboard() {
val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}
fun EditText.onDone(callback: () -> Unit) {
// These lines optional if you don't want to set in Xml
imeOptions = EditorInfo.IME_ACTION_DONE
maxLines = 1
setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE) {
callback.invoke()
true
}
false
}
}
Phần mở rộng bàn phím bổ sung
Nếu bạn muốn nhiều cách hơn để đơn giản hóa việc làm việc với bàn phím (hiển thị, đóng, tập trung): Đọc bài đăng này
Đừng quên thêm các tùy chọn này vào Xml edittext của bạn, nếu không có mã
<EditText ...
android:imeOptions="actionDone"
android:inputType="text"/>
Cần inputType="textMultiLine"
hỗ trợ? Đọc bài đăng này và không thêm imeOptions
hoặc inputType
trong Xml