我有一个自定义的DialogFragment,其中有一个输入文本,当对话框显示时,我会显示键盘,当按下完成按钮或按下肯定按钮或对话框被关闭以隐藏键盘。我试着将键盘显示为如下所示:第一个并以这种方式隐藏它:第一次但是键盘没有显示,如果我把注意力集中在输入上,并试图关闭对话框,键盘仍然保持打开状态。
DialogFragment
rqqzpn5f1#
我通过将isCancelable设置为false来解决这个问题,因为我无法在覆盖点击时隐藏键盘。我设法在每个关闭对话框的操作中使用函数hideKeyboard(),所以当它等于IME_ACTION_DONE时,正负按钮和编辑器都可以操作。为了在显示对话框时显示键盘,我添加了以下代码:
isCancelable
false
hideKeyboard()
IME_ACTION_DONE
dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE)
下面是我的DialogFragment的代码:
private fun hideKeyboard() { val im: InputMethodManager = requireActivity().getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager im.hideSoftInputFromWindow(quantity.windowToken, 0) } private lateinit var quantity: EditText override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { return activity?.let { val builder = AlertDialog.Builder(requireContext()) val view = layoutInflater.inflate(R.layout.dialog_quantity_input, null) isCancelable = false quantity = view.findViewById(R.id.quantity) builder.setView(view) viewModel.selectedProduct.value.let { quantity.setText(it?.quantity.toString()) } builder.setTitle("Modifica quantità") builder.setPositiveButton("Conferma") { _, _ -> ... hideKeyboard() } builder.setNegativeButton("Annulla") { _, _ -> hideKeyboard() } quantity.setOnEditorActionListener { v, actionId, _ -> if (actionId == EditorInfo.IME_ACTION_DONE) { ... hideKeyboard() dismiss() } false } quantity.requestFocus() val dialog = builder.create() dialog.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE) return dialog } ?: throw IllegalStateException("Activity cannot be null") }
1条答案
按热度按时间rqqzpn5f1#
我通过将
isCancelable
设置为false
来解决这个问题,因为我无法在覆盖点击时隐藏键盘。我设法在每个关闭对话框的操作中使用函数hideKeyboard()
,所以当它等于IME_ACTION_DONE
时,正负按钮和编辑器都可以操作。为了在显示对话框时显示键盘,我添加了以下代码:
下面是我的DialogFragment的代码: