AlertDialog按钮文本颜色与支持库v24.2.1
我有AlertDialog问题。这些按钮不再使用accentColor来设置按钮文本颜色。AlertDialog按钮文本颜色与支持库v24.2.1
我正在使用最新的支持库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
实现,按钮包含在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
没有,也可以使用另一个父按钮样式不符合你的要求。 colorAccent不施加到AlertDialog按钮在AndroidÑ:
使用Widget.AppCompat.Button.ButtonBar.AlertDialog
作为按钮父样式的example by [email protected]可以在AOSP问题220699中找到。
一定要导入的正确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.
我刚刚使用模拟器进行了测试:我的应用程序之一,也是OP的代码。在牛轧糖上运行时,都使用按钮文字颜色的主要文字颜色。这可能是另一个牛轧糖的错误:(昨天有人发布关于动画问题,今天这... – 0X0nosugar
因此,我建议你使用支持库,因为它是独立于系统版本风格的。 –
谢谢,但这正是我我在做:)你在牛轧糖上测试了你的答案吗?我真的认为这是一个错误。非AppCompat AlertDialog:没问题。 DialogFragment:没问题。 AppCompat AlertDialog:Button上的文本颜色是textColorPrimary(来自对话框样式)。如果您可以使用您发布的代码和OP的style.xml来运行自己的测试,并告诉我们您是否可以确认问题,那将是非常好的。 – 0X0nosugar
@Christian LeichtJørgensen - 为我工作,在DialogFragment中都带有独立的AlertDialog和AlertDialog。现在,我真的希望它也适用于你 – 0X0nosugar
这个伎俩。感谢您的帮助! –
这个变化是否记录在任何地方? –