在对话框中设置按钮背景?

时间:2011-04-28 07:13:54

标签: android xml

我有一个对话框,对我来说效果很好,但我想在此对话框中为两个按钮设置背景。它的结构非常复杂,所以我不想将它重写为自定义对话框。但在这种情况下,是否有可能设置背景(更具体地说,有没有办法将样式设置为正/负/中性按钮)?

5 个答案:

答案 0 :(得分:15)

基本上你想要访问对话框按钮:这些(在标准的AlertDialog上)当前有{ids android.R.id.button1为正面,android.R.id.button2为负面,android.R.id.button3为中性。

例如,要在中性按钮上设置背景图像,您可以这样做:

Dialog d;
//
// create your dialog into the variable d
//
((Button)d.findViewById(android.R.id.button3)).setBackgroundResource(R.drawable.new_background);

编辑:如果您使用AlertDialog.Builder来创建它。据我所知,这些按钮分配可能会在将来发生变化,因此请记住这一点。

编辑:下面的代码块应该生成一些看起来像你想要的东西。事实证明,你必须在更改背景之前调用show

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage("TEST MESSAGE)
        .setPositiveButton("YES", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        })
        .setNegativeButton("NO", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        });
        AlertDialog alert = builder.create();
        alert.show();
((Button)alert.findViewById(android.R.id.button1)).setBackgroundResource(R.drawable.button_border);

答案 1 :(得分:2)

实际上,获得Dialog的按钮比使用@Femi发布的按钮更好更可靠。

您可以使用getButton方法:

Button positiveButton = yourDialog.getButton(DialogInterface.BUTTON_POSITIVE);

DialogInterface提供了所有需要的常量:

DialogInterface.BUTTON_POSITIVE
DialogInterface.BUTTON_NEUTRAL
DialogInterface.BUTTON_NEGATIVE

答案 2 :(得分:0)

请注意,对于此类问题,覆盖show()方法是不好的做法。

为了将解决方案封装到对话框本身的创建中,最佳做法是在对话框构造函数中自定义按钮:

class CustomDialog extends AlertDialog
{
    public CustomDialog(final Context context)
    {
        super(context);

        setOnShowListener(new OnShowListener()
        {
            @Override
            public void onShow(DialogInterface dialog)
            {
                Button negativeButton = getButton(DialogInterface.BUTTON_NEGATIVE);  
                Button positiveButton = getButton(DialogInterface.BUTTON_POSITIVE);

                negativeButton.setBackgroundColor(Color.GREEN);
                positiveButton.setBackgroundColor(Color.RED);
            }
        }
    }
}

答案 3 :(得分:0)

AlertDialog alert = builder.create();
alert.show();
Button bn = alert.getButton(DialogInterface.BUTTON_NEGATIVE);
bn.setBackgroundColor(Color.RED);
Button bp = alert.getButton(DialogInterface.BUTTON_POSITIVE);
bp.setBackgroundColor(Color.YELLOW);

答案 4 :(得分:0)

如果您想保留标准文本按钮并更改按钮的背景和整个对话框,您可以在styles.xml中定义自己的对话框主题,如下所示:

<style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
        <item name="android:background">@color/colorBackground</item>
</style>

...然后当您构建对话框以设置其背景时:

AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyDialogTheme);