Tôi khuyên bạn nên sử dụng LifecyclObserver , một phần của Vòng đời xử lý với các thành phần nhận biết vòng đời của Android Jetpack .
Tôi muốn mở và đóng Bàn phím khi Mảnh / Hoạt động xuất hiện. Đầu tiên, xác định hai chức năng mở rộng cho EditText. Bạn có thể đặt chúng ở bất cứ đâu trong dự án của bạn:
fun EditText.showKeyboard() {
requestFocus()
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.showSoftInput(this, InputMethodManager.SHOW_IMPLICIT)
}
fun EditText.hideKeyboard() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(this.windowToken, 0)
}
Sau đó, xác định LifecyclObserver mở và đóng bàn phím khi Activity / Fragment đạt onResume()
hoặc onPause
:
class EditTextKeyboardLifecycleObserver(private val editText: WeakReference<EditText>) :
LifecycleObserver {
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
fun openKeyboard() {
editText.get()?.postDelayed({ editText.get()?.showKeyboard() }, 100)
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
fun closeKeyboard() {
editText.get()?.hideKeyboard()
}
}
Sau đó thêm dòng sau vào bất kỳ Phân đoạn / Hoạt động nào của bạn, bạn có thể sử dụng lại LifecyclObserver bất cứ lúc nào. Ví dụ cho một mảnh:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
// inflate the Fragment layout
lifecycle.addObserver(EditTextKeyboardLifecycleObserver(WeakReference(myEditText)))
// do other stuff and return the view
}