应用于AlertDialog的样式无法正常工作

时间:2016-03-09 23:23:06

标签: java android alertdialog android-styles textcolor

我被要求将应用程序中警报对话框的外观与应用程序主题使用的警报对话框相匹配。
我设法将一个样式应用到应用程序中的所有警报对话框,使用它作为应用程序主题的一部分,但有些情况下样式未正确应用。

例如,当警报对话框包含“单一选择列表”时,就会发生这种情况。作为它的'消息。
标题看起来很好,背景和按钮栏也是如此,但列表本身也存在问题 首先,单选按钮以及它们的文本描述都是黑色的,就像android使用默认颜色一样。

我设法通过使用这些属性设置为单选按钮着色:

<item name="android:colorControlNormal">@color/text_secondary</item>
<item name="android:colorControlActivated">@color/text_secondary</item>  

但是文字颜色仍然是黑色的,我已经尝试了由em公开的 EVERY 可能的文字颜色属性。

看起来像这样:

enter image description here

现在这是为警报对话框定义的完整样式:

<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;

最后,这里是我用来创建带有单一选择列表的警报对话框的代码&#39;:

dialogBuilder.setSingleChoiceItems(R.array.squelch_modes, m_InitialState, new DialogInterface.OnClickListener()
        {
            @Override
            public void onClick(DialogInterface dialog, int which)
            {
                // Do Something
            }
        });

我做错了什么?如何更改文本的颜色?

值得一提的是,我正在使用AppCompat的AlertDialog。

2 个答案:

答案 0 :(得分:3)

刚刚找到s = df.text.str.split('|', expand=True).stack().str.split('=', expand=True) s.columns = ['idx',''] print (s) idx 0 0 1 88 1 11 1438 2 15 KKK 3 45 7.7 4 45 00 5 21 66 6 86 a 1 0 4 13 1 4 1388 2 49 DDD 3 8 157.73 4 67 00 5 45 08 6 84 b 7 45 k 2 0 6 84 1 41 18 2 56 TTT 3 67 1.2 4 4 21 5 45 78 6 07 d dfs = [g.set_index('idx').rename_axis(None) for i, g in s.groupby(level=0)] print (dfs[0]) 1 88 11 1438 15 KKK 45 7.7 45 00 21 66 86 a 的旧帖子,但由于没有答案,我会在我的案例中添加诀窍:

Google

中的android:删除textColorAlertDialogListItem前缀
alertdialog style

我想这是因为父母是<item name="textColorAlertDialogListItem">@color/text_secondary</item> ,但我不确定这一点。我仍然以我的风格添加AppCompat theme ......

答案 1 :(得分:1)

我知道它可能已经晚了...但是你的回答是:{App for AppCompat支持库中的android.support.v7.app.AlertDialog默认情况下使用this布局(除非你提供自己的适配器)对于singleChoiceDialog:

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
                 android:id="@android:id/text1"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:minHeight="?attr/listPreferredItemHeightSmall"
                 android:textAppearance="?android:attr/textAppearanceMedium"
                 android:textColor="?attr/textColorAlertDialogListItem"
                 android:gravity="center_vertical"
                 android:paddingLeft="@dimen/abc_select_dialog_padding_start_material"
                 android:paddingRight="?attr/dialogPreferredPadding"
                 android:paddingStart="@dimen/abc_select_dialog_padding_start_material"
                 android:paddingEnd="?attr/dialogPreferredPadding"
                 android:drawableLeft="?android:attr/listChoiceIndicatorSingle"
                 android:drawableStart="?android:attr/listChoiceIndicatorSingle"
                 android:drawablePadding="20dp"
                 android:ellipsize="marquee" />

用于在主题中设置它的属性是singleChoiceItemLayout,因此您可以使用自己的布局覆盖它以获得您想要的任何UI。

如果您只想更改文字颜色,只需定义属性textColorAlertDialogListItem,您可以从布局中看到android:textColor所使用的属性。

一般情况下,当我需要这样的东西时,我会去查看源代码,因为它可用。可以找到支持库源代码here,而大多数框架源代码可以找到here