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
A simple dialog containing an DatePicker . This class was deprecated in API level 26.
AlertDialog is a lightweight version of a Dialog. This is supposed to deal with INFORMATIVE matters only, That's the reason why complex interactions with the user are limited. Dialog on the other hand is able to do even more complex things .
AlertDialog. A dialog that can show a title, up to three buttons, a list of selectable items, or a custom layout.
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();
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With