我需要一个带有EditText字段的AlertDialog来接受输入。这本身就十分简单。然而,从这个请求中,我想要一些“显而易见”的功能。我将逐一列举它们。如果有人有更简单的解决方案,请告诉我。我猜测解决方案是,“自己写一个定制对话框吧,懒鬼。”
现在这并不是一个很好的解决方案(重复代码),但它确实发挥了作用...
人们有更好的方法来解决这个问题吗?或者向用户在对话框中询问少量信息真的如此罕见,还是我只是在抱怨,应该去编写自己的对话框?
final EditText input = new EditText(context);
final AlertDialog dlg = new AlertDialog.Builder(this).
setTitle("Title").
setView(input).
setCancelable(false).
setPositiveButton(android.R.string.ok, new OnClickListener()
{
@Override
public void onClick(final DialogInterface dialog, final int which)
{
/* Handle ok clicked */
dialog.dismiss();
}
}).
setNegativeButton(android.R.string.cancel, new OnClickListener()
{
@Override
public void onClick(final DialogInterface dialog, final int which)
{
/* Handle cancel clicked */
dialog.dismiss();
}
}).create();
dlg.show();
太好了,非常顺利。如果输入框能够立即聚焦(并显示键盘),那就太好了,对吧?
AlertDialog
中的聚焦EditText
下面的代码将在 create()
之后,在dlg.show()
之前进行:
/** This requires API Level 8 or greater. */
dlg.setOnShowListener(new OnShowListener()
{
@Override
public void onShow(final DialogInterface dialog)
{
input.requestFocus();
((InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(input, 0);
}
});
干得好...我猜。既然有了这个专注的输入,如果它能尊重输入的IME选项就更好了...
AlertDialog
与一个聚焦的EditText
和自定义的IME选项
input.setImeOptions(EditorInfo.IME_ACTION_DONE);
input.setOnEditorActionListener(new OnEditorActionListener()
{
@Override
public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event)
{
/** Same code here that goes in the dialog.setPositiveButton OnClickListener */
dlg.dismiss();
return true;
}
});
现在这并不是一个很好的解决方案(重复代码),但它确实发挥了作用...
人们有更好的方法来解决这个问题吗?或者向用户在对话框中询问少量信息真的如此罕见,还是我只是在抱怨,应该去编写自己的对话框?
setUpImeDialog(AlertDialog dlg, EditText input) { ... }
? - Catdlg.getButton(DialogInterface.BUTTON_POSITIVE).performClick();
。虽然它仍然是一个次要的事件,但它避免了重复的代码。(如果这就是你想要的,我可以把它添加为答案。) - Cat