#android #kotlin #android-fragments
Вопрос:
У меня есть фрагмент с редактируемым текстом, используемый в качестве строки поиска. То, что я хочу сделать, когда я нажимаю кнопку «Назад», чтобы закрыть клавиатуру, которая открывается при нажатии на редактируемый текст, — это отключить мигающий курсор. По какой-то причине, когда я обрабатываю приведенный ниже код, курсор все еще остается видимым.
editText.setOnKeyListener{ _, keyCode, event ->
if(keyCode == KeyEvent.KEYCODE_BACK) {
editText.isCursorVisible = false
true
} else {
false
}
}
Я пробовал разные методы, но ни один из них не дал мне желаемого результата. Я что-то упускаю или есть другой способ справиться с этим?
Ответ №1:
Отправьте фокус на другой компонент на странице. Это должно быть полезно Или убрать фокус с вашего редактируемого текста с помощью этого кода
edittext.clearFocus();
Комментарии:
1. К сожалению, я попробовал этот метод и не работает, мигающий курсор все еще виден.
2. Вы можете добавить невидимый редактируемый текст с 0 высотой и шириной и направить фокус на него
Ответ №2:
Вы действительно пытаетесь очистить фокус при нажатии кнопки «Назад»? Из предоставленного кода видно, что вы пытаетесь скрыть его, когда «Назад» нажимается только на клавиатуре.
Да, но эта реализация не в порядке. Вы должны поймать событие фактической обратной печати, а не так, как вы делаете это здесь. Я думаю, что здесь происходит то, что при первом нажатии кнопки «Назад» клавиатура скрывается, и вы даже не получаете клавишу «Назад». Теперь, если вы снова нажмете кнопку «Назад», она фактически скроет курсор. Также предоставленный код отключает кнопку «Назад», она будет работать только в том случае, если клавиатура открыта, в противном случае она просто очистит фокус и больше ничего не сделает
Я думаю, что что-то подобное могло бы охватить ваше дело:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activity?.onBackPressedDispatcher?.addCallback(this, object : OnBackPressedCallback(false) {
override fun handleOnBackPressed() {
editText.clearFocus()
}
})
}
Комментарии:
1. Я попытался подойти к этому по-другому с помощью clearFocus(), но все равно ничего. Из предоставленного кода я пытаюсь отключить курсор при нажатии кнопки «Назад».
2. Да, но эта реализация не в порядке. Вы должны поймать событие фактической обратной печати, а не так, как вы делаете это здесь. Я думаю, что здесь происходит то, что при первом нажатии кнопки «Назад» клавиатура скрывается, и вы даже не получаете клавишу «Назад». Теперь, если вы снова нажмете кнопку «Назад», она фактически скроет курсор. Также предоставленный код отключает кнопку «Назад», она будет работать только в том случае, если клавиатура открыта, в противном случае она просто очистит фокус и больше ничего не сделает
3. Хорошо, можете ли вы поделиться примером с наилучшим возможным подходом?