Set a background to buttons in a dialog?
我有一个对话框,对我来说效果很好,但我想在此对话框中为两个按钮设置背景。 它的结构非常复杂,所以我不想将它重写为自定义对话框。 但在这种情况下,是否有可能设置背景(更具体地说,有没有办法将样式设置为正/负/中性按钮)?
从根本上说,你想要访问对话框按钮:这些(在标准的AlertDialog上)目前有ids
例如,要在中性按钮上设置背景图像,您可以执行以下操作:
1 2 3 4 5 | Dialog d; // // create your dialog into the variable d // ((Button)d.findViewById(android.R.id.button3)).setBackgroundResource(R.drawable.new_background); |
编辑:如果您使用AlertDialog.Builder创建它。据我所知,这些按钮分配可能会在将来发生变化,因此请记住这一点。
编辑:下面的代码块应该生成看起来像你想要的东西。事实证明,你必须在更改背景之前调用show
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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); |
实际上,获得
您可以使用getButton方法:
1 | Button positiveButton = yourDialog.getButton(DialogInterface.BUTTON_POSITIVE); |
DialogInterface提供了所有需要的常量:
1 2 3 | DialogInterface.BUTTON_POSITIVE DialogInterface.BUTTON_NEUTRAL DialogInterface.BUTTON_NEGATIVE |
如果要保留标准文本按钮并更改按钮的背景和整个对话框,可以在
1 2 3 | <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <item name="android:background">@color/colorBackground</item> </style> |
...然后当你构建对话框来设置它的背景时:
1 | AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyDialogTheme); |
1 2 3 4 5 6 | 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); |
请注意,对于此类问题,覆盖show()方法是不好的做法。
为了将解决方案封装到对话框本身的创建中,最佳做法是在对话框构造函数中进行按钮自定义:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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); } } } } |