我遇到AlertDialog问题。按钮不再使用accentColor来设置按钮文本颜色。
我正在使用最新的支持库v24.2.1。我通过以下方式在styles.xml中设置对话框样式:
<style name="Base.Theme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:alertDialogTheme">@style/Widget.DialogStyle</item>
<item name="alertDialogTheme">@style/Widget.DialogStyle</item>
</style>
并且Widget.DialogStyle看起来像这样:
<style name="Widget.DialogStyle" parent="@style/Theme.AppCompat.Light.Dialog.Alert">
<item name="android:colorAccent" tools:targetApi="lollipop">@color/primaryColor</item>
<item name="colorAccent">@color/primaryColor</item>
<item name="android:textColorPrimary">@color/primaryText</item>
<item name="android:textColor">@color/primaryText</item>
<item name="android:background">@color/backgroundColor</item>
<item name="android:textAppearanceLarge">@color/primaryText</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
</style>
在应用程序API低于24时,对话框按钮使用colorAccent着色,但在API 24上,这不再是行为(文本为黑色,应为橙色)。请参阅以下screenshot。
有没有人知道如何让按钮上的accentColor? 谢谢。
答案 0 :(得分:13)
对于某些AlertDialog
实现,按钮包含在ButtonBar 中,从buttonBarButtonStyle
获取样式。因此,您必须覆盖从父主题(Theme.AppCompat.Light.Dialog.Alert
)继承的设置。
将以下项目添加到Widget.DialogStyle
:
<item name="buttonBarButtonStyle">@style/MyButtonStyle</item>
并添加另一个名为MyButtonStyle
的样式:
<style name="MyButtonStyle" parent="Widget.AppCompat.Button.Borderless">
<!-- Set background drawable and text size of the buttons here
<item name="android:background">@color/my_dialog_dark</item>-->
<item name="android:textSize">18sp</item>
<!-- this is the button text color! -->
<item name="android:textColor">@color/primaryColor</item>
</style>
修改强>
感谢kirtan403指出这一点:如果Widget.AppCompat.Button.Borderless
不符合您的要求,您还可以使用其他父样式。
使用Widget.AppCompat.Button.ButtonBar.AlertDialog
作为按钮的父样式的example by nicola.v...@icapps.com可以在AOSP问题220699下找到: colorAccent不适用于Android N上的AlertDialog按钮。
答案 1 :(得分:1)
确保输入正确的AlertDialog
:
import android.support.v7.app.AlertDialog
还尝试使用另一个AlertDialog.Builder
构造函数来膨胀对话框:
android.support.v7.app.AlertDialog.Builder#Builder(android.content.Context, int)
这意味着,第二个参数是对话框的样式:
mDialog = new AlertDialog.Builder(context, R.style.Widget.DialogStyle).create();
编辑:
共享代码,用于显示警告对话框:
public AlertDialog showSimpleDialog(Context context, String title, String message, String btnOk, DialogInterface.OnClickListener handler) {
if (mDialog != null && mDialog.isShowing()) {
mDialog.dismiss();
mDialog = null;
}
mDialog = new AlertDialog.Builder(context, R.style.AppTheme_Dialog).create();
mDialog.setTitle(title);
mDialog.setMessage(message);
mDialog.setButton(DialogInterface.BUTTON_POSITIVE, btnOk, handler);
mDialog.setCanceledOnTouchOutside(false);
mDialog.show();
return mDialog;
}
和风格:
<style name="AppTheme.Dialog" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="colorAccent">@color/colorPrimary</item> //blue
<item name="android:textColorPrimary">@color/primary_text_material_light</item> //black
<item name="android:windowMinWidthMajor">97%</item>
<item name="android:windowMinWidthMinor">97%</item>
</style>
按钮为蓝色。在仿真器API 24上测试。