AlertDialog 按钮文本颜色与支持库 v24.2.1
AlertDialog button text color with support library v24.2.1
我在使用 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 恢复原样?
谢谢。
确保导入正确 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.
对于某些 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
不符合您的要求,您还可以为按钮使用其他父级样式。
可以在 AOSP 问题 220699 下找到使用 Widget.AppCompat.Button.ButtonBar.AlertDialog
作为按钮父样式的 example by nicola.v...@icapps.com:colorAccent 未应用于 Android N 上的 AlertDialog 按钮。
我在使用 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 恢复原样? 谢谢。
确保导入正确 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.
对于某些 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
不符合您的要求,您还可以为按钮使用其他父级样式。
可以在 AOSP 问题 220699 下找到使用 Widget.AppCompat.Button.ButtonBar.AlertDialog
作为按钮父样式的 example by nicola.v...@icapps.com:colorAccent 未应用于 Android N 上的 AlertDialog 按钮。