Android:当焦点在 EditText 上时自动显示软键盘

新手上路,请多包涵

我正在使用 AlertDialog 显示一个输入框。当我调用 AlertDialog.show() 时,对话框内部的 EditText 会自动聚焦,但不会自动显示软键盘。

如何在显示对话框时自动显示软键盘? (并且没有物理/硬件键盘)。类似于当我按下搜索按钮调用全局搜索时,软键盘会自动显示。

原文由 Randy Sugianto ‘Yuku’ 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

You can create a focus listener on the EditText on the AlertDialog , then get the AlertDialog ’s Window .从那里您可以通过调用 setSoftInputMode 来显示软键盘。

 final AlertDialog dialog = ...;

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }
});

原文由 Randy Sugianto ‘Yuku’ 发布,翻译遵循 CC BY-SA 2.5 许可协议

这对我有用。我为对话框设置了一个 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 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题