Reputation: 2731
My issue is that my custom alertdialog class is not displaying the softkeyboard correctly. I am creating it using
SettingsDialog settingsDialog = new SettingsDialog(MainActivity.this);
settingsDialog.show();
And the softkeyboard is not displaying. I've followed other stackoverflow answers to displaying the keyboard ... Show soft keyboard for dialog
and it works if I do not use a custom class
AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this);
mBuilder.setView(R.layout.alertdialog_settings);
AlertDialog alertDialog = mBuilder.create();
alertDialog.show();
However when using a custom AlertDialog class I can't seem to get the same outcome as the picture above
I have tried manually displaying the keyboard
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);
}
However it shows the keyboard behind the alertdialog and doesn't give the same effect as AlertDialog Builder.
How can I display the softkeyboard using a Custom AlertDialog to have output as using AlertDialog Builder?
Edit:
I have also tried manually displaying it in the AlertDialog's onCreate Method
public class SettingsDialog extends AlertDialog {
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);
}
}
}
However this still causes the keyboard to be displayed behind the alertDialog
Upvotes: 6
Views: 1319
Reputation: 3242
I think you do not need to extend the Alert Dialog class, what you can do is simply a your custom java which contain helper function create your custom dialog, so you will still have code abstraction and can add additional features with ease.
public class SettingsDialog {
private AlertDialog.Builder mBuilder = null;
private AlertDialog alertDialog = null;
public SettingsDialog(@NonNull Context context, String subName) {
this.mSubName = subName;
this.mContext = context;
}
public show(){
mBuilder = new AlertDialog.Builder(mContext);
mBuilder.setView(R.layout.someID);
alertDialog = mBuilder.create();
alertDialog.show();
}
public void dismiss(){
if(alertDialog == null) return;
alertDialog.dismiss();
}
// can use interface to handle callbacks
}
// usage
SettingsDialog sd = new SettingsDialog(this, "MATHS");
sd.show();
//sd.dismiss();
Upvotes: 4
Reputation: 2731
I've tried many other methods but this one finally works.
SortByDialog sortByDialog = new SortByDialog(MainActivity.this);
sortByDialog.show();
sortByDialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
|WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
Need to make sure the clearFlags is after the .show()
for your custom AlertDialogClass
Upvotes: 7
Reputation: 1113
Try to show the keyboard with some delay е.g. 100-200ms after the dialog create, or just try to request focus for the dialog's EditText using EditText.requestFocus() also with delay after the dialog create.
Upvotes: -2