Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Default Focus and Keyboard to EditText in Android AlertDialog

Tags:

I am using the AlertDialog.Builder in Android to quickly prompt the user for text. The dialog shows up and works great, but the user must click on the EditText field to load the soft keyboard. Is there any way to open the keyboard and give focus to the whenever my dialog is opened? Here is my code:

final Map<String,Object> rowData = itemList.get(mPosition);                     final EditText input = new EditText(searchList.getContext());                 input.requestFocus();                   input.setSingleLine();                 final AlertDialog dialog = new AlertDialog.Builder(searchList.getContext())                 .setTitle(StringUtils.getSafeString(rowData.get("label")))                 .setView(input)                 .setPositiveButton("Ok", new DialogInterface.OnClickListener() {                     public void onClick(DialogInterface dialog, int whichButton) {                          rowData.put("value", StringUtils.getSafeString(input.getText()));                         searchList.invalidateViews();                      }                 }).setNegativeButton("Cancel", new DialogInterface.OnClickListener() {                     public void onClick(DialogInterface dialog, int whichButton) {                         // Do nothing.                     }                 }).create();                 dialog.show(); 
like image 339
cain Avatar asked Mar 21 '12 20:03

cain


People also ask

What is the use of AlertDialog in Android?

AlertDialog. A dialog that can show a title, up to three buttons, a list of selectable items, or a custom layout. DatePickerDialog or TimePickerDialog. A dialog with a pre-defined UI that allows the user to select a date or time.

What is AlertDialog message?

Android AlertDialog can be used to display the dialog message with OK and Cancel buttons. It can be used to interrupt and ask the user about his/her choice to continue or discontinue. Android AlertDialog is composed of three regions: title, content area and action buttons.


2 Answers

Use the following code. It worked for me.

    editText.setOnFocusChangeListener(new OnFocusChangeListener() {         @Override         public void onFocusChange(View v, boolean hasFocus) {             editText.post(new Runnable() {                 @Override                 public void run() {                     InputMethodManager inputMethodManager= (InputMethodManager) YourActivity.this.getSystemService(Context.INPUT_METHOD_SERVICE);                     inputMethodManager.showSoftInput(editText, InputMethodManager.SHOW_IMPLICIT);                 }             });         }     });     editText.requestFocus(); 
like image 54
Ahamed Avatar answered Sep 19 '22 06:09

Ahamed


Hidden keyboard when programmatically setting focus on an EditText in an Android Dialog.

I had this problem as well and it was a pretty simple fix - here is my suggested solution. Although it worked on DialogFragments for me, I see no reason why it wouldn't work in your case.

Basically the soft keyboard isn't triggered because the view is being created programmatically. The actual fix was simply putting this line in the onCreateDialog method:

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

From the Android documentation on DialogFragments:

If the user focuses on an EditText, the soft keyboard will automatically appear. In order to force this to happen with our programmatic focus, we call getDialog().getWindow().setSoftInputMode(). Note that many Window operations you might have done previously in a Dialog can still be done in a DialogFragment, but you have to call getDialog().getWindow() instead of just getWindow().

@Override public Dialog onCreateDialog(Bundle savedInstanceState) {      //setup your dialog builder and inflate the view you want here     ...     //Make sure your EditText has the focus when the dialog is displayed     edit.requestFocus();     //Create the dialog and save to a variable, so we can set the keyboard state     Dialog dialog = builder.create();     //now, set to show the keyboard automatically     dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);     return dialog; } 
like image 37
RightHandedMonkey Avatar answered Sep 18 '22 06:09

RightHandedMonkey