我的活动中有一个searchView视图。当我点击它时,键盘会打开(应该是这样(,但当我按下后退按钮时,我希望它关闭键盘(可见(,但它会关闭整个应用程序。这是在我添加此代码后开始发生的。这有助于我在触摸键盘外部时隐藏键盘:
override fun dispatchTouchEvent(ev: MotionEvent?): Boolean {
if (currentFocus != null) {
val imm = this.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(this.currentFocus!!.windowToken, 0)
}
return super.dispatchTouchEvent(ev)
}
我该怎么做才能先按下后退按钮关闭打开的键盘,然后再关闭应用程序?
您确定被剪切的代码导致了所描述的行为吗?我刚刚写了一个小示例应用程序来复制这个问题。然而,即使使用dispatchTouchEvent
代码,按下第一个后退按钮也会关闭键盘,只有第二个按钮会退出应用程序。
我在API 30上用模拟器对它进行了测试。
您是否每次更改都覆盖了onBackPressed()
和/或onKeyDown()
?
编辑:
我想我已经发现了这个问题,为什么它对我有效,但对你无效。
- 第一个区别:您使用的是手势导航。如果你切换到3按钮导航,我敢打赌它也会对你有用
- 第二个区别(可能(:当使用
SearchView
时,我可以看到与您在视频中描述/显示的行为相同的行为。切换到androidx.appcompat.widget.SearchView
,问题应该得到解决。:(