我正在使用 AlertDialog
显示一个输入框。当我调用 AlertDialog.show()
时,对话框内部的 EditText
会自动聚焦,但不会自动显示软键盘。
如何在显示对话框时自动显示软键盘? (并且没有物理/硬件键盘)。类似于当我按下搜索按钮调用全局搜索时,软键盘会自动显示。
原文由 Randy Sugianto ‘Yuku’ 发布,翻译遵循 CC BY-SA 4.0 许可协议
我正在使用 AlertDialog
显示一个输入框。当我调用 AlertDialog.show()
时,对话框内部的 EditText
会自动聚焦,但不会自动显示软键盘。
如何在显示对话框时自动显示软键盘? (并且没有物理/硬件键盘)。类似于当我按下搜索按钮调用全局搜索时,软键盘会自动显示。
原文由 Randy Sugianto ‘Yuku’ 发布,翻译遵循 CC BY-SA 4.0 许可协议
这对我有用。我为对话框设置了一个 OnShowListener,在该侦听器中,我为文本字段设置了一个 onFocusChangeListener,在该 FocusChangeListener 中,我以 100 毫秒的延迟调用 showSoftInput,然后删除 FocusChangeListener,因此它只处理第一个焦点更改。
调用 dialog.show()
时,将调用 OnShowListener,它请求文本字段的焦点。当文本字段获得焦点时,将调用 FocusChangeListener 并最终显示键盘。
val views = DialogBinding.inflate(layoutInflater) // layout with 'textfield'
val dialog = MaterialAlertDialogBuilder(requireContext())
.setTitle("Exercise")
.setView(views.root)
...
.create()
dialog.setOnShowListener {
views.textfield.onFocusChangeListener = View.OnFocusChangeListener { view, _ ->
view.postDelayed({
(view.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager).showSoftInput(view, 0)
}, 100)
views.textfield.onFocusChangeListener = null
}
views.repcount.requestFocus()
}
dialog.show()
原文由 Ridcully 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答1.3k 阅读✓ 已解决
2 回答2.6k 阅读
2 回答1.7k 阅读
1 回答2.1k 阅读
1 回答1.1k 阅读
1 回答1.3k 阅读
1.3k 阅读
You can create a focus listener on the
EditText
on theAlertDialog
, then get theAlertDialog
’sWindow
.从那里您可以通过调用setSoftInputMode
来显示软键盘。