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