5

我想要一个带有 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;
    }
});

现在这确实不是一个很好的解决方案(重复代码),但它可以工作......

人们是否有更好的方法来解决这个问题,或者在对话中向用户询问一小段信息真的很少见,还是我只是一个赢家,应该去写我自己的对话?

4

2 回答 2

7

根据对 OP 的评论:

您不必在OnEditorActionListener. 您可以告诉操作系统在激活时单击“确定”按钮,而不是重复代码。

像这样的东西:

public boolean onEditorAction(final TextView v, final int actionId, final KeyEvent event) {
    dlg.getButton(DialogInterface.BUTTON_POSITIVE).performClick(); // Click OK button
    return true;
}

总的来说,我会说您采用了正确的方法(有关通过对话框收集信息的文档)。正如我在评论中提到的,操作系统使用AlertDialogw/EditText来添加字典单词(到用户字典),所以这是操作系统中的预期功能。

于 2012-09-05T20:45:39.547 回答
2

您可以随时切换到Activity带有主题的Theme.Dialog主题或DialogFragment在调整小部件时为您提供更多自由的主题。AlertDialogs可能更适合显示信息。希望这可以帮助。

于 2012-09-05T20:35:31.677 回答