有人知道如何覆盖AlertDialog按钮的默认样式吗?我已经浏览了themes和styles的Android源代码,并尝试了不同的东西,但我还没有找到一种有效的方法。
下面的代码可以改变背景,但对按钮没有任何作用。myTheme
通过manifest应用于整个<application>
。(为了清晰起见,删除了一些其他项目,但它们只与标题栏相关。)
<style name="myTheme" parent="android:Theme">
<item name="android:buttonStyle">@style/customButtonStyle</item>
<item name="android:alertDialogStyle">@style/dialogAlertTheme</item>
</style>
<style name="dialogAlertTheme" parent="@android:style/Theme.Dialog.Alert">
<item name="android:fullDark">@drawable/dialog_loading_background</item>
<item name="android:topDark">@drawable/dialog_alert_top</item>
<item name="android:centerDark">@drawable/dialog_alert_center</item>
<item name="android:bottomDark">@drawable/dialog_alert_bottom</item>
<!-- this last line makes no difference to the buttons -->
<item name="android:buttonStyle">@style/customButtonStyle</item>
</style>
有什么想法吗?
8条答案
按热度按时间wz8daaqr1#
考虑到Snowflake先生的推理是不准确的,我可以自由地提供另一个答案。
Steve Haley的问题中的标记有错误,它混淆了alertDialogStyle和alertDialogTheme,很可能是因为alertDialogTheme是在alertDialogStyle出现很久之后才引入的。
因此,即使@android:style/Theme.Dialog.Alert在您的Andoid平台上可用,您仍然无法通过将定制版本挂钩回您自己的主题来利用其表现力,除非您的Android平台支持主题的android:alertDialogTheme属性/项。(我不确定是否存在这种不一致的Android版本。但问题中使用的标记表明确实存在。)
在问题的标记中,parent="@android:style/Theme.Dialog.Alert”不会执行任何操作,只会造成您自定义提醒对话框主题的假象,而实际上您只是自定义提醒对话框样式。
这是标记的外观;并非所有Android版本都支持所有功能。
自定义警报对话框样式已经有一段时间了,但仅限于为“fullDark”、“topDark”等提供(背景)绘图。
自定义警报对话框主题会打开一个方法来提供windowBackground、windowTitleStyle等属性,但如前所述,您需要一个支持主题的alertDialogThem属性/项的Android版本。我无法确切地说出这是何时引入的,但它还没有到Android 2.2,Eclipse无论如何都会告诉您...
我没有足够的资源来验证Snowflake先生的结论,即不可能用XML来设计警报对话框按钮的样式,但除非我们面临Android中真正缺少某个功能的令人讨厌的方面,否则我发现这是不可能的。
事实上,问题所遗漏的,正是这方面最重要的部分,即
所以警报对话框按钮不服从Widget.Button的结论还没有从我的Angular 得到证明。
综合结论:独立于其他小工具设置提醒对话框样式的功能在Android中受到限制,但随着新版本在这方面的改进,该功能将变得更加强大。
thigvfpy2#
试试这个:
5kgi1eie3#
您可以重写“buttonBarButtonStyle”而不是“buttonStyle”,如下所示:
yks3o0rb4#
如果使用“材质组件”:
这将保留主题的颜色,但替换按钮的样式,例如匹配
Widget.MaterialComponents.Button.TextButton
。acruukt95#
我创建了一个类似这样的方法,它将更改默认的按钮颜色和背景
这可能对一些人有用!
tzdcorbm6#
请参阅下面的所有其他答案。
不正确:
我猜您必须实现自己的
Dialog
类。zlwx9yxi7#
这允许我自定义AlertDialog按钮和布局。
t1qtbnec8#
在Kotlin,情况会是这样的: