Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AlertDialog with EditText, open soft keyboard automatically with focus on EditText doesn't work

I'm trying to get a piece of code work which should focus an EditText in an AlertDialog as soon as it shows and then automatically open the soft keyboard. Instead, it just makes the screen go darker.

Builder builder = new Builder(this); final EditText input = new EditText(this); AlertDialog dialog = builder.create(); builder     .setTitle(R.string.dialog_title_addsubject)     .setMessage(R.string.dialog_addsubject)     .setView(input)     .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {         public void onClick(DialogInterface dialog, int which) {             String value = input.getText().toString();             if (input.getText().toString().trim().length() == 0) {                 Toast.makeText(Main.this, R.string.input_empty, Toast.LENGTH_SHORT).show();             } else {                 db.insertSubject(value);                 getData();             }          }     })     .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {         public void onClick(DialogInterface dialog, int which) {         }     });     input.requestFocus();     dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);     dialog.show(); 

I tried many ways of doing this but none worked. I hope you guys can help me here. Thanks in advance!

like image 663
NiPfi Avatar asked Oct 21 '12 11:10

NiPfi


People also ask

How do I enable soft keyboard on Android?

By default, the soft keyboard may not appear on the emulator. If you want to test with the soft keyboard, be sure to open up the Android Virtual Device Manager ( Tools => Android => AVD Manager ) and uncheck "Enable Keyboard Input" for your emulator. Now restart the emulator.

Is AlertDialog deprecated?

A simple dialog containing an DatePicker . This class was deprecated in API level 26.


1 Answers

Ok I managed to get it working:

Builder builder = new Builder(this);             final EditText input = new EditText(this);             builder                 .setTitle(R.string.dialog_title_addsubject)                 .setMessage(R.string.dialog_addsubject)                 .setView(input)                 .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {                      public void onClick(DialogInterface dialog, int which) {                         String value = input.getText().toString();                         if (input.getText().toString().trim().length() == 0) {                             Toast.makeText(Main.this, R.string.input_empty, Toast.LENGTH_SHORT).show();                         } else {                             db.insertSubject(value);                             getData();                         }                         InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);                         imm.hideSoftInputFromWindow(input.getWindowToken(), 0);                     }                 })                 .setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {                      public void onClick(DialogInterface dialog, int which) {                         InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);                         imm.hideSoftInputFromWindow(input.getWindowToken(), 0);                     }                  });                  builder.show();                 input.requestFocus();                 InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);                 imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0); 

This method doesn't need a dialog so I can use builder.show() to show the dialog and the code provided by Sabre opens the soft keyboard. Another code snippet in each of the buttons closes the soft keyboard automatically.

like image 161
NiPfi Avatar answered Sep 20 '22 19:09

NiPfi