android 显示对话框的软键盘

new9mtju  于 12个月前  发布在  Android
关注(0)|答案(6)|浏览(163)

我正在显示一个带有编辑文本视图的对话框。然而,只有当用户在编辑视图中按下时,软键盘才会打开。因此,我尝试使用以下代码调用InputMethodManager。

InputMethodManager imm =
 (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(dialogField,0);

字符串
dialogField是输入字段。然而,我到底应该在什么时候这样做呢?我在dialog的onStart()方法中尝试过,但没有任何效果。我之前也尝试过为dialogField请求焦点,但没有任何改变。
我也试过这个代码

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);
            */
        }
    }
});


在两个版本中。但是没有软键盘会出现。Main.log只是一个日志,它向我表明函数实际上被调用了。是的,它被调用了。
我可以在对话框打开之前用SHOW_FORCED标志获取键盘。但是在退出时它不会关闭。我只能在显示对话框之前这样做。在任何回调中它也不起作用。

6vl6ewon

6vl6ewon1#

很棒的问题,我也试着这样做,并找到了解决方案。
使用对话框构建器类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();

字符串
这对我来说很好。
注意:你必须import android.view.WindowManager.LayoutParams;为常量值。

xpszyzbs

xpszyzbs2#

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);

字符串

tzcvj98z

tzcvj98z3#

Kotlin

下面是测试代码。

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)

字符串
确保你从show()方法访问window属性。从create()方法获取window对我来说是返回null,所以键盘不显示。
androidx.appcompat.app.AlertDialog导入AlertDialog。从android.view导入WindowManager

llycmphe

llycmphe4#

这是我的解决方案,它在对话框中运行良好。

txtFeedback.requestFocus();
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
inputMethodManager.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);

字符串
也许你还需要将此添加到AndroidManifest.xml中的Activity标记中,以便在对话框关闭时关闭键盘。

android:windowSoftInputMode="stateAlwaysHidden"

e7arh2l6

e7arh2l65#

使用Kotlin的对话片段

override onStart方法

override fun onStart() {
    super.onStart()
    dialog.window?.
    setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE
    )
}

字符串
如果您想在解除后关闭,请使用以下代码覆盖解除方法

override fun onDismiss(dialog: DialogInterface?) {
val inputMethodManager = context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(activity?.currentFocus?.windowToken, InputMethodManager.HIDE_IMPLICIT_ONLY)
}

izkcnapc

izkcnapc6#

我尝试过并取得了成功:

editText.requestFocus();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);

字符串

相关问题