我被要求将应用程序中警报对话框的外观与应用程序主题使用的对话框的外观匹配。
我设法将样式应用于应用程序中的所有警报对话框,并将其用作应用程序主题的一部分,但有时样式应用不正确。
例如,当警报对话框包含“单选列表”作为其“消息”时,就会发生这种情况。
标题看起来不错,背景和按钮栏也不错,但是列表本身有问题。
起初,单选按钮及其文本描述都是黑色的,就像android使用的是默认颜色一样。
我用这些属性设法使单选按钮按我的意愿上色:
<item name="android:colorControlNormal">@color/text_secondary</item>
<item name="android:colorControlActivated">@color/text_secondary</item>
但是文本颜色仍然是黑色的,我已经尝试了android公开的所有可能的文本颜色属性。
看起来是这样的:
现在,这是为警报对话框定义的完整样式:
<style name="GenericAlertDialog.Alter" parent="Theme.AppCompat.Light.Dialog.Alert">
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowMinWidthMajor">@android:dimen/dialog_min_width_major</item>
<item name="android:windowMinWidthMinor">@android:dimen/dialog_min_width_minor</item>
<item name="android:windowTitleStyle">@style/DialogTitle</item>
<item name="android:textColor">@color/text_secondary</item>
<item name="android:textColorPrimary">@color/primary</item>
<item name="android:background">@color/window_background</item>
<item name="android:colorAccent">@color/accent</item>
<item name="android:textColorAlertDialogListItem">@color/text_secondary</item>
<!--<item name="android:textColorSecondary">@color/text_secondary</item>-->
<item name="android:colorControlNormal">@color/text_secondary</item>
<item name="android:colorControlActivated">@color/text_secondary</item>
</style>
这是我的主题定义:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="android:windowBackground">@color/window_background</item>
<item name="android:colorPrimary">@color/primary</item>
<item name="android:colorAccent">@color/accent</item>
<item name="android:textColorPrimary">@color/text_primary</item>
<item name="android:textColorSecondary">@color/text_secondary</item>
<item name="android:textColorHint">@color/text_hint</item>
<item name="android:buttonStyle">@style/GenericButton</item>
<item name="android:checkboxStyle">@style/GenericCheckBox</item>
<item name="android:alertDialogTheme">@style/GenericAlertDialog</item>
<item name="alertDialogTheme">@style/GenericAlertDialog</item>
</style>
这是我用于创建自定义警报对话框的代码:
AlertDialog.Builder dialogBuilder = null;
try
{
dialogBuilder = new AlertDialog.Builder(i_OwnerActivity, R.style.GenericAlertDialog_Alter);
LayoutInflater layoutInflater = i_OwnerActivity.getLayoutInflater();
// Inflate the dialog's custom title view and set it's text to the matching one to this class
View customTitleView = layoutInflater.inflate(R.layout.dialog_title, null);
TextView customTitleTextView = (TextView) customTitleView.findViewById(R.id.DialogTitleText);
// Set text of customTitleView
dialogBuilder.setCustomTitle(customTitleView);
// Create an event handler for clicking on the negative button
dialogBuilder.setNegativeButton(R.string.action_dialog_negative_cancel, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface i_Dialog, int i_Which)
{
// Do Something
}
});
} catch (Exception e)
{
LogUtils.logException(AlterDialogUtils.class, e);
}
return dialogBuilder;
最后,下面是我用来创建带有“单选列表”的警报对话框的代码:
dialogBuilder.setSingleChoiceItems(R.array.squelch_modes, m_InitialState, new DialogInterface.OnClickListener()
{
@Override
public void onClick(DialogInterface dialog, int which)
{
// Do Something
}
});
我做错什么了?如何更改文本的颜色?
值得一提的是,我正在使用AppCompat的AlertDialog。
最佳答案
刚刚发现这篇文章有Google
,但由于没有答案,我将在我的案例中添加什么诀窍:
从android:
中的textColorAlertDialogListItem
中删除alertdialog style
前缀
<item name="textColorAlertDialogListItem">@color/text_secondary</item>
我想这是因为父母是一个
AppCompat theme
,但我不确定这一点。我仍然在我的风格中添加了(with and without prefix)
。