默认焦点和键盘到Android AlertDialog中的EditText

我在Android中使用AlertDialog.Builder快速提示用户input文字。 对话框显示并且工作得很好,但是用户必须点击EditText字段才能加载软键盘。 有没有办法打开键盘,并把焦点对准我的对话框打开? 这是我的代码:

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(); 

使用下面的代码。 它为我工作。

  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(); 

以编程方式将焦点置于Android对话框中的EditText上时隐藏键盘。

我也有这个问题,这是一个非常简单的修复 – 这是我build议的解决scheme。 虽然它为我工作在DialogFragments,我没有理由为什么它不会在你的情况下工作。

基本上软键盘不会被触发,因为视图是以编程方式创build的。 实际的修复只是把这一行放在onCreateDialog方法中:

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

从DialogFragments上的Android文档:

如果用户关注EditText,软键盘将自动出现。 为了强制这一点发生在我们的编程焦点上,我们调用了getDialog()。getWindow()。setSoftInputMode()。 请注意,以前在Dialog中完成的许多Window操作仍然可以在DialogFragment中完成,但必须调用getDialog()。getWindow()而不是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; } 

InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,0); 隐藏键盘使用:

InputMethodManager imm =(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(view.getWindowToken(),0);

或尝试下面的代码,但你必须设置requestFocus()或您的编辑文本

 editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } } }); 

如果您更经常需要使用自定义视图

 public class RequestFocusEditText extends AppCompatEditText { private RequestFocusEditText self; public RequestFocusEditText(final Context context, AttributeSet attrs) { super(context, attrs); this.self = this; setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { post(new Runnable() { @Override public void run() { InputMethodManager inputMethodManager = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE); inputMethodManager.showSoftInput(self, InputMethodManager.SHOW_IMPLICIT); } }); } }); requestFocus(); } } 

在你的XML布局

呼叫

 <requestFocus/> 

在默认的EditText里面

 <EditText android:blabla .... <requestFocus/> />