AlertDialog-显示带有自定义类的软键盘不起作用

问题描述 投票:1回答:2

我的问题是自定义的alertdialog类未正确显示软键盘。我正在使用

创建它
SettingsDialog settingsDialog = new SettingsDialog(MainActivity.this);
settingsDialog.show();

并且软键盘未显示。我已经遵循其他stackoverflow答案来显示键盘... Show soft keyboard for dialog

如果我不使用自定义类,也可以使用

AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this);
mBuilder.setView(R.layout.alertdialog_settings);
AlertDialog alertDialog = mBuilder.create();
alertDialog.show();

enter image description here

但是,当使用自定义AlertDialog类时,我似乎无法获得与上图相同的结果

我尝试手动显示键盘

SettingsDialog settingsDialog = new SettingsDialog(MainActivity.this);
settingsDialog.show();
InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
if(imm != null){
   imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
}

enter image description here

但是,它显示了Alertdialog后面的键盘,并且没有与AlertDialog Builder相同的效果。

如何使用“自定义AlertDialog”显示软键盘以使其具有使用AlertDialog Builder的输出?

编辑:

我也尝试过在AlertDialog的onCreate方法中手动显示它

 public SettingsDialog(@NonNull Context context, String subName) {
        super(context);
        this.mContext = context;
        this.mSubName = subName;

}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.alertdialog_settings);

    InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
    if(imm != null){
      imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0);
    }

}

但是这仍然会使键盘显示在alertDialog的后面

android android-alertdialog android-softkeyboard
2个回答
0
投票

您应该将SettingsDialog扩展到AlertDialog.Builder而不是AlertDialog。然后您的SettingsDialog应该像这样:

public class SettingsDialog extends AlertDialog.Builder {
    public SettingsDialog(Context context) {
        super(context);
        setView(R.layout.alertdialog_settings);
    }
}

-1
投票

[尝试稍微延迟显示键盘,例如对话框创建后100-200ms,或者尝试使用EditText.requestFocus()为对话框的EditText请求焦点,对话框创建后也会延迟。

© www.soinside.com 2019 - 2024. All rights reserved.