Я хочу упростить мой код.
Я реализовал способ скрытия программной клавиатуры при касании экрана с помощью SearchView.
Я покажу вам код ...
Вызов (внутри действия, где sv является экземпляром SearchView)
hideKeyboard(this, sv)
Веселые расширения
fun Activity.hideKeyboard(context: Context, sv: SearchView) {
hideKeyboard(HideKeyboardWithSearchView(context, sv))
}
fun Activity.hideKeyboard(hideKeyboard: HideKeyboardWithSearchView) {
window.decorView.rootView.setOnTouchListener { _, _ ->
hideKeyboard.start()
return@setOnTouchListener false
}
}
И класс для выполнения действия
import android.content.Context
import android.support.v7.widget.SearchView
import android.view.inputmethod.InputMethodManager
class HideKeyboardWithSearchView(private val context: Context, private val sv: SearchView) {
fun start() {
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(sv.windowToken, 0)
sv.clearFocus()
}
}
Я хотел бы объединить два забавных расширения в одно. Я думаю, что это должно быть легко с лямбдой или подобным, но я не очень хорошо контролирую эту часть языка ...: - (
Есть идеи? : -)
РЕШЕНИЕ
Решено Ря и Павел .
fun Activity.hideKeyboard(sv: SearchView) {
window.decorView.rootView.setOnTouchListener { _, _ ->
HideKeyboardWithSearchView(this, sv).start()
return@setOnTouchListener false
}
}