【发布时间】:2019-07-31 17:13:59
【问题描述】:
我有一些EditText 行的类似表单的布局。最后一行是Spinner。我想在最后一个EditText 中点击Done 按钮时打开抽屉菜单。但是行为很奇怪。每次我点击Done 时,它都会在几分之一秒内打开抽屉菜单,然后立即关闭菜单。你知道任何解决方案。我认为ScrollView 引起了一些问题。因为我在另一个没有ScrollView 的布局中使用了相同的功能并且它工作正常。
//hide keyboard and auto-open dropdown menu on last EditText in form
editText?.setOnEditorActionListener { _, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE){
editText?.let { app.hideKeyboard(it) }
spinner?.performClick()
}
true
}
fun hideKeyboard(view: View){
val imm = getSystemService(Activity.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
}
更新:
我使用了教程中的CustomSpinner,之后我想听打开事件并隐藏键盘。它仍在关闭该下拉菜单。我真的不知道是什么原因造成的。尝试手动向下滚动到底部,仍然是同样的问题。
更新 - 解决方案
我必须为ScrollView 的全滚动创建处理程序到它的最底部,并且我必须将spinner.performClick() 放在处理程序中,因为隐藏键盘正在改变屏幕高度,ScrollView 将关闭选项菜单直到键盘终于被隐藏了。
这意味着延迟 fullscroll 和 performclick 不会关闭选项菜单。
代码:
editText?.setOnEditorActionListener { v, actionId, _ ->
if (actionId == EditorInfo.IME_ACTION_DONE){
v?.apply {
clearFocus()
app.hideKeyboard(this)
post(delay = 200){scrollView?.fullScroll(View.FOCUS_DOWN)}
}
post(delay = 200) {spinner?.performClick()}
}
true
}
【问题讨论】:
标签: android android-layout kotlin android-spinner android-scrollview