扩展AlertDialog有什么问题还为什么在对话框的EditText中没有自动IME

时间:2011-12-09 16:09:20

标签: java android alertdialog

我有这个对话框(我正在简化我的用例):

class EditShoppingListDialog extends AlertDialog {

    public EditShoppingListDialog(Context context) {
        super(context/*, R.style.AppCustomDialog*/);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.dialog_addshoppinglist);
        setTitle("Mike Testing");
    }
}

我在OnCreateDialog方法之外创建并使用了这个子类的AlertDialog(在我的Activity的onContextItemSelected中),如下所示:

AlertDialog dialog = new EditShoppingListDialog(this);
dialog.show();

现在,我已经使用这个代码库超过一个月了,从未发现任何问题,这让我想知道他们为什么建议使用AlertDialog.Builder来创建自定义对话框。

当我将应用程序部署到真实设备时,我立即开始发现问题。最阻塞的是,即使单击AlertDialog中的EditText字段,我也无法显示软键盘(IME?)。

这是最好的部分;如果我说:

class EditShoppingListDialog extends Dialog {
    ...
}

如果单击对话框中的EditText,则会自动显示IME。我找到了这个thread,但是已接受的解决方案不适用于AlertDialog。

但是,我发现在我派生的AlertDialog的OnCreate上执行此操作有助于显示IME,但它落后于对话框,我无法与之交互:

InputMethodManager imm = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT,0);

对于丢失的帖子我真的很抱歉,但我已经花了5个多小时的时间,并且非常感谢一些帮助。我坚持扩展AlertDialog的原因是因为我需要一个没有标题栏的对话框,它在Android Dialog文档中说我没有标题栏的对话框。

2 个答案:

答案 0 :(得分:2)

设置没有标题的对话框很容易。 创建如下的样式,

 <style name="no_title_dialog" parent="@android:style/Theme.Dialog">
    <item name="android:windowNoTitle">true</item>
</style>

使用

进行初始对话
Dialog notitleDialog = new Dialog(this, R.style.no_title_dialog);

对话框应显示为无标题

答案 1 :(得分:0)

拥有一个没有标题栏的AlertDialog根本不是魔术:

AlertDialog.Builder builder;
AlertDialog alertDialog;

TextView v = new TextView(this);
v.setText("Should have no Bar...");

builder = new AlertDialog.Builder(this);
builder.setView(v);
alertDialog = builder.create();

alertDialog.show();

这看起来像这样:

no title bar

(不,这不是Toast!)。如果这不是您想要的,那么您应该更明确地指出“我需要一个没有标题栏的对话框”。