当前位置: 首页 > 知识库问答 >
问题:

样式应用于AlertDialog不能正常工作

颜云瀚
2023-03-14

我被要求将我们应用程序中警报对话框的外观与应用程序主题使用的外观相匹配。
我设法将一种样式应用于应用程序中的所有警报对话框,并将其作为应用程序主题的一部分,但也有一些情况样式应用不正确。

例如,当警报对话框包含“单一选择列表”作为其“消息”时,就会发生这种情况。
标题看起来不错,背景和按钮栏也不错,但是列表本身是有问题的。
起初,单选按钮及其它们的文本描述是黑色的,好像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。

共有1个答案

呼延高超
2023-03-14

刚刚在Google上找到了这篇老文章,但由于没有答案,我将在我的案例中添加技巧:

alertdialog样式中的textColorAlertDialogListItem中删除android:前缀

<item name="textColorAlertDialogListItem">@color/text_secondary</item>

我想这是因为父对象是一个AppCompat主题,但我不确定这一点。我仍然以我的风格添加(带前缀和不带前缀)。。。

 类似资料:
  • 我正试图在按下某个按钮时弹出一个警报对话框。我首先使用了Android Developer的示例代码而不是'这不起作用,所以我根据在这个站点上发现的情况进行了更改,但是现在我的程序在按下按钮后被迫停止。 就你的知识而言,这是在第二个不同于主要的活动中完成的。不确定这是否重要.... ‘ 碰撞日志:“03-25 19:34:24.373:E/AndroidRuntime(18828):致命异常:ma

  • 我使用的是wordpress主题突出。它已经有了针对移动响应的媒体查询,这些查询来自: 正如你所见,它涵盖了从手机到平板电脑的宽度。我们的开发人员不希望在其所在的全局css中更改此默认代码,但我们需要使该站点在单个页面的css上的单独查询中响应手机和平板电脑。我希望手机的最大宽度为480px,平板电脑的最大宽度为1024,桌面电脑的最大宽度为2000。 我应该提出的三个媒体查询的正确顺序和语法是什

  • 2,错误{org.apache.directory.server.LDAP.ldapserver}-ERR_171无法将LDAP服务(10,389)绑定到服务注册表。java.net.BindException:已在使用的地址 请帮忙谢谢 --------提示------------------- JAVA_HOME环境变量设置为/opt/java CARBON_HOME环境变量设置为/mnt/1

  • 我正在尝试设置AlertDialog的样式。它在API 23和24上运行良好,但在API 19上运行不正常。以下是它的外观: 对的 以及它在API 19上的外观: 不准确的 我找不到任何关于我必须编辑哪些项才能更改这些黑色、删除那个条浅蓝色线或不应该存在的额外阴影的信息,甚至找不到应用于AlertDialog的样式项列表。这是我的风格。我添加了一堆我可能不需要的东西,因为我正试图解决这个问题。 我

  • 我正在做一个类似生存的游戏,我有两种类型的碰撞,一种是玩家的敌人,另一种是敌人身上的子弹。我也有一个健康栏,由于某些原因,在picbox被移除后,健康仍然下降,就像敌人与玩家互动一样。 这是子弹碰撞代码的一个块(所有8个方向的所有代码都是相同的) 这是敌方与玩家碰撞的暗号

  • 我遇到了奇怪的问题与.NET版本的POI库为Excel电子表格。我正在重写从文本文件到Excel97-2003文档,我想添加一些格式,以编程方式,依赖于一些在程序的乞求下收集的值。 一开始,在我根据给定值创建一个新单元格的方法中,我也创建了一个新的工作簿CellStyle,这是错误的,因为我很快就用完了这些样式(或者我只是认为这是问题的原因)。 负责Excel工作簿的类的构造函数: 长话短说,在F