显示对话框的软键盘

Ren*_*ene 70 android android-sdk-2.1 android-softkeyboard

我正在显示一个带有edittext视图的对话框.但是,仅当用户按下编辑视图内部时,才会打开软键盘.所以我尝试使用以下代码调用InputMethodManager.

InputMethodManager imm =
 (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(dialogField,0);
Run Code Online (Sandbox Code Playgroud)

dialogField是输入字段.但是,我到底应该这样做呢?我在对话框的onStart()方法中尝试了它,但没有任何反应.我之前也尝试过请求对话框的焦点,但这没有任何改变.

我也试过这段代码

dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
    public void onFocusChange (View v, boolean hasFocus)
    {
        if (hasFocus)
        {
            Main.log("here");
            dialogInput.getWindow().setSoftInputMode(
              WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            /*
                InputMethodManager mgr =
                  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                mgr.showSoftInput(dialogField,0);
            */
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

在两个版本中.但是没有软键盘会出现.Main.log只是一个日志,它向我显示该函数实际被调用.是的,它被称为.

在对话框打开之前,我可以使用SHOW_FORCED标志获取键盘.但是在退出时它不会关闭.而且我只能在显示对话框之前这样做.在任何回调中它也不起作用.

Spa*_*arK 172

令人敬畏的问题,我也试图这样做,并找到了解决方案.

使用对话框构建器类,AlertDialog.Builder您必须像这样调用对话框:

AlertDialog.Builder builder = new AlertDialog.Builder();
AlertDialog dialog;

builder.set...

dialog = builder.create();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.show();
Run Code Online (Sandbox Code Playgroud)

这对我来说很好.

注意:你必须import android.view.WindowManager.LayoutParams;为那里的常数值.

  • 对于任何有相同问题的人,请注意`setSoftInputMode()`必须在`show()`之前调用. (4认同)
  • 对我来说就是“ SOFT_INPUT_STATE_ALWAYS_VISIBLE” (2认同)
  • 哇,非常感谢你!我们可以向SO添加捐款或捐款按钮以表示感谢吗? (2认同)

小智 7

 AlertDialog dialog = new AlertDialog.Builder(this).create();
    dialog.show();
    Window window = dialog.getWindow();
    window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
    window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
Run Code Online (Sandbox Code Playgroud)

  • 老兄你太棒了!windows.cl3wrFlags 行很重要。我已经检查了每个 SO 答案,并且其他任何地方都没有提到该行。谢啦! (2认同)

Yog*_*ity 6

科特林

这是经过测试的代码。

val dialog = AlertDialog.Builder(requireContext()).apply {
    setTitle(…)
    setView(editText)
    setPositiveButton(…)
    setNegativeButton(…)
}
val window = dialog.show().window
window?.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE or WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM)
window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE)
Run Code Online (Sandbox Code Playgroud)

确保您windowshow()方法访问该属性。windowcreate()方法中获取null对我来说正在返回,所以键盘没有显示。

导入AlertDialogandroidx.appcompat.app.AlertDialog。导入WindowManagerandroid.view