AlertDialogs中的按钮样式

有谁知道如何覆盖AlertDialog按钮的默认样式? 我已经浏览了Android源代码中的主题和样式,并尝试了不同的东西,但我还没有find一种有效的方法。

我下面的内容适用于更改背景,但不对按钮执行任何操作。 myTheme通过清单应用于整个 。 (为清楚起见,删除了其他一些项目,但它们仅与标题栏相关。)

  @style/customButtonStyle @style/dialogAlertTheme   @drawable/dialog_loading_background @drawable/dialog_alert_top @drawable/dialog_alert_center @drawable/dialog_alert_bottom  @style/customButtonStyle  

有任何想法吗?

我想你必须实现自己的Dialog类。

鉴于斯诺弗拉克先生的推理不准确,我可以自由地提供另一个答案。

在Steve Haley的问题中, 标记有问题,它混合了alertDialogStyle和alertDialogTheme,很可能是因为在alertDialogStyle出现之后很久就引入了alertDialogTheme。

因此,即使你的Andoid平台上有@android:style / Theme.Dialog.Alert,你仍然无法通过将一个cusomized版本挂回到你自己的主题来利用它的表现力,除非你的Android平台支持android:alertDialogTheme属性/主题项目。 (这种不一致的Android版本可能存在也可能不存在,我不确定。但问题中使用的标记表明它确实存在。)

在问题的标记中,parent =“@ android:style / Theme.Dialog.Alert”除了创建您自定义警报对话框主题的错觉时, 什么也不做,只是在您自定义警报对话框样式时。

这就是标记的样子; 并非所有Android版本都支持所有function。

    

自定义警报对话框样式已经存在很长时间了,但仅限于为“fullDark”,“topDark”等提供(背景)drawable。

自定义警报对话框主题会打开一个方法来提供诸如windowBackground,windowTitleStyle等属性,但如前所述,您需要一个Android版本,它支持主题的alertDialogThem属性/项目。 我无法弄清楚这是什么时候介绍但它不是Android 2.2而且Eclipse无论如何会告诉你…

我没有资源来validationMrSnowflake的结论,即不可能在XML中设置警告对话框按钮的样式,但除非我们面临Android中那些有些令人讨厌的方面,其中一个function真的缺失,我发现它不太可能。

事实上,问题中缺少的是这方面最相关的部分,即

  

因此,警报对话框按钮不遵守Widget.Button的结论尚未从我的观点certificate。

综合结论: 独立于其他小部件设置警报对话框的能力在Android中受到限制,但随着新版本在这方面的改进而变得更强大。

尝试这个:

  @style/Widget.AppCompat.ButtonBar @style/AppTheme.Button @style/YoursTheme @style/YoursTheme @style/YoursTheme 

您可以像这样覆盖“buttonBarButtonStyle”而不是“buttonStyle”:

  

我做了一个这样的方法,将改变默认的按钮颜色和背景

 public static void setDefaultColorTextForDialogButton(AlertDialog alertDialog, Resources r) { Button b; b= alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE); if(b != null) { b.setTextColor(r.getColor(R.color.default_text)); b.setBackgroundColor(Color.WHITE); } b = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE); if(b != null) { b.setTextColor(r.getColor(R.color.default_text)); b.setBackgroundColor(Color.WHITE); } b = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL); if(b != null) { b.setTextColor(r.getColor(R.color.default_text)); b.setBackgroundColor(Color.WHITE); } } 

这可能对某些人有用!!!