我想要一个带有 EditText 字段的 AlertDialog 来接受输入。这本身就很简单。但是,我希望有一些“明显”的功能可以作为此请求的结果。我会一个接一个。我正在寻找对这些事情有更简单解决方案的人。我猜解决方案是,“写你自己的自定义对话框,你这个懒惰的人。”
AlertDialog
带着EditText
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;
}
});
现在这确实不是一个很好的解决方案(重复代码),但它可以工作......
人们是否有更好的方法来解决这个问题,或者在对话中向用户询问一小段信息真的很少见,还是我只是一个赢家,应该去写我自己的对话?