Ste*_*ley 21 android android-alertdialog
有谁知道如何覆盖AlertDialog按钮的默认样式?我已经浏览了Android源代码中的主题和样式,并尝试了不同的东西,但我还没有找到一种有效的方法.
我下面的内容适用于更改背景,但对按钮没有任何作用.通过清单myTheme应用于整体<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>
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
cla*_*ker 27
鉴于MrSnowflake先生的推理不准确,我可以自由地提供另一个答案.
也有一些是错误与标记史蒂夫·海利的问题,这是因为该alertDialogTheme引入长alertDialogStyle大约是在事后混合起来alertDialogStyle和alertDialogTheme,最有可能的.
因此,即使你的Andoid平台上有@android:style/Theme.Dialog.Alert,你仍然无法通过将一个cusomized版本挂回到你自己的主题来利用它的表现力,除非你的Android平台支持android:alertDialogTheme属性/主题项目.(这种不一致的Android版本可能存在也可能不存在,我不确定.但问题中使用的标记表明它确实存在.)
在问题的标记中,parent ="@ android:style/Theme.Dialog.Alert" 除了创建您自定义警报对话框主题的错觉时,什么也不做,只是在您自定义警报对话框样式时.
这就是标记的样子; 并非所有Android版本都支持所有功能.
<style name="myTheme" parent="android:Theme">
<item name="android:buttonStyle">@style/customButtonStyle</item>
<item name="android:alertDialogStyle">@style/dialogAlertStyle</item>
<item name="android:alertDialogTheme">@style/dialogAlertTheme</item>
</style>
<style name="dialogAlertStyle" parent="@android:style/AlertDialog">
<item name="android:fullDark">[...]</item>
[...]
</style>
<style name="dialogAlertTheme" parent="@android:style/Theme.Dialog.Alert">
<item name="android:windowBackground">[...]</item>
[...]
</style>
Run Code Online (Sandbox Code Playgroud)
自定义警报对话框样式已经存在了很长时间,但仅限于为"fullDark","topDark"等提供(背景)drawable.
自定义警报对话框主题会打开一个方法来提供诸如windowBackground,windowTitleStyle等属性,但如前所述,您需要一个Android版本,它支持主题的alertDialogThem属性/项目.我无法弄清楚这是什么时候引入的,但它不是Android 2.2,Eclipse无论如何都会告诉你......
我没有足够的资源来验证MrSnowflake的结论,即在XML中设置警告对话框按钮是不可能的,但除非我们面临Android中那些有些令人讨厌的方面,其中一个功能真的缺失,我发现它不太可能.
事实上,问题中缺少的是这方面最相关的部分,即
<style name="customButtonStyle" />
Run Code Online (Sandbox Code Playgroud)
因此,警报对话框按钮不遵守Widget.Button的结论尚未从我的观点证明.
综合结论:独立于其他小部件设置警报对话框的能力在Android中受到限制,但随着新版本在这方面的改进而变得更加强大.
小智 10
试试这个:
<item name="buttonBarStyle">@style/Widget.AppCompat.ButtonBar</item>
<item name="buttonBarButtonStyle">@style/AppTheme.Button</item>
<item name="buttonBarPositiveButtonStyle">@style/YoursTheme</item>
<item name="buttonBarNegativeButtonStyle">@style/YoursTheme</item>
<item name="buttonBarNeutralButtonStyle">@style/YoursTheme</item>
Run Code Online (Sandbox Code Playgroud)
您可以像这样覆盖“buttonBarButtonStyle”而不是“buttonStyle”:
<style name="dialogAlertTheme" parent="@android:style/Theme.Dialog.Alert">
<item name="android:buttonBarButtonStyle">@style/customButtonStyle</item>
</style>
Run Code Online (Sandbox Code Playgroud)
如果您使用的是材质组件:
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="android:alertDialogTheme">@style/AlertDialogTheme.Light</item>
</style>
<style name="AlertDialogTheme.Light" parent="ThemeOverlay.MaterialComponents.Dialog.Alert" >
<item name="android:buttonBarButtonStyle">@style/InsertCustomButtonStyleHere</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这将保留主题的颜色,但替换按钮的样式,例如匹配Widget.MaterialComponents.Button.TextButton。
请参阅下面的所有其他答案。
错误:
我想你必须实现你自己的Dialog课程。
| 归档时间: |
|
| 查看次数: |
37353 次 |
| 最近记录: |