如何在自定义对话框中创建肯定和否定按钮?

3
我想创建一个自定义对话框。因此,我创建了一个名为“dialog_change”的模板,并打开了对话框。
Dialog myDialog = new Dialog(Overview.this);
myDialog.setContentView(R.layout.dialog_change);
myDialog.setTitle("My Custom Dialog Title");
myDialog.show();

enter image description here

现在我想在底部加入两个按钮(一个是肯定的,一个是否定的),我该怎么做呢?


我首先建议尝试使用setPositiveButton()和setNegativeButton()。 - Code-Apprentice
1
@Code-Guru,Dialog类中不存在那些方法。David,为什么不直接使用AlertDialog而不是重新创建它呢? - Sam
@Sam 抱歉,我应该先仔细检查 API 指南。你可以使用 AlertDialog 代替普通对话框。它有一个 setButton() 方法,应该能够满足你的需求。 - Code-Apprentice
1
@Sam 或者更好的方法是使用 AlertDialog.Builder,它具有 setPositiveButton() 和 setNegativeButton() 方法(以及用于自定义视图的 setView() 方法)。 - Code-Apprentice
@Code-Guru 我同意使用 AlertDialog,因为它已经具有按钮并且可以接受自定义布局。 - Sam
请查看我在同一个问题上的回答。 http://stackoverflow.com/questions/14472991/how-to-put-two-buttons-on-alert-box/14473930#14473930 - Fahad Ishaque
2个回答

5

我建议你创建一个自定义类来模拟AlertDialog,这样你就可以使用自己的布局而不受任何限制。(如果你想要一个完全样式化的AlertDialog,有一些奇怪的问题无法完全消除边框。)像这样的东西,但你可以尽情扩展:

public class CustomDialog extends Dialog {
    private Button positive, negative;

    public CustomDialog(Context context) {
        super(context);
        initialize(context);
    }

    protected CustomDialog(Context context, boolean cancelable, OnCancelListener cancelListener) {
        super(context, cancelable, cancelListener);
        initialize(context);
    }

    public CustomDialog(Context context, int theme) {
        super(context, theme);
        initialize(context);
    }

    private void initialize(Context c) {
        //Inflate your layout, get a handle for the buttons

        positive = (Button)layout.findViewById(R.id.positive):
        negative = (Button)layout.findViewById(R.id.negative):

        positive.setVisibility(View.GONE);
        negative.setVisibility(View.GONE);
    }

    public void setPositiveButton(String buttonText, View.OnClickListener listener) {
        positive.setText(buttonText);
        positive.setOnClickListener(listener);
        positive.setVisibility(View.VISIBLE);
    }

    public void setNegativeButton(String buttonText, View.OnClickListener listener) {
        negative.setText(buttonText);
        negative.setOnClickListener(listener);
        negative.setVisibility(View.VISIBLE);
    }
}

我们无法对 android.app.AlertDialog.Builder.setPositiveButton(CharSequence text, OnClickListener listener) 中的 builder.setPositiveButton("OK", positiveClick) 做同样的操作。 - LOG_TAG

1
你可以将这两个按钮添加到自定义布局中,该布局用于对话框(即dialog_change)。 然后在创建对话框后,可以按以下方式访问它们:
Dialog myDialog = new Dialog(Overview.this);
View view = LayoutInflater.from(context).inflate(R.layout.dialog_change,null);
myDialog.setContentView(view);
myDialog.setTitle("My Custom Dialog Title");

Button button1 = (Button)view.findViewById(R.id.button1);
button1.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View v){
        dialog.dismiss();
    }
});
//Similarly for the second button
myDialog.show();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接