【发布时间】:2023-03-19 01:11:01
【问题描述】:
我被要求将我们应用中的警报对话框的外观与应用主题使用的外观相匹配。
我设法将一种样式应用于应用程序中的所有警报对话框,并将其用作应用程序主题的一部分,但在某些情况下该样式未正确应用。
例如,当警报对话框包含“单一选择列表”作为其消息时,就会发生这种情况。
标题看起来不错,背景和按钮栏也不错,但列表本身就有问题。
起初,单选按钮以及它们的文字描述都是黑色的,好像 android 使用的是默认颜色。
通过使用这些属性,我设法为单选按钮着色:
<item name="android:colorControlNormal">@color/text_secondary</item>
<item name="android:colorControlActivated">@color/text_secondary</item>
但是文本颜色仍然是黑色,我已经尝试了 EVERY 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。
【问题讨论】:
标签: java android android-alertdialog android-styles textcolor