如何在AlertDialog中更改文本颜色

25

AlertDialog

如何在AlertDialog中更改文本颜色?

<item name="android:textColor">@color/black_text</item>

这只改变标题的颜色。

ad = new AlertDialog.Builder((new ContextThemeWrapper(context, R.style.DialogTheme)));
            ad.setTitle(R.string.my_activ_remove_title_dialog);

            ad.setPositiveButton(R.string.my_activ_remove_dialog, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int arg1) {
                    content.remove(position);
                    notifyItemRemoved(position);
                    notifyItemRangeChanged(position, content.size());
                }

            });
            ad.setNegativeButton(R.string.my_activ_cancel_remove_dialog, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int arg1) {

                }
            });

警告对话框 v2

6个回答

62

仅更改字体颜色,请尝试以下方法:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setTitle(Html.fromHtml("<font color='#FF7F27'>This is a test</font>"));
    builder.setPositiveButton(Html.fromHtml("<font color='#FF7F27'>Yes</font>"), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int arg1) {
            Log.e(LOG_TAG, "Yes");
        }
    });
    builder.setNegativeButton(Html.fromHtml("<font color='#FF7F27'>No</font>"), new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int arg1) {
            Log.e(LOG_TAG, "No");
        }
    });
    builder.create();
    builder.show();

结果:

在此输入图片描述


要更改字体颜色和按钮背景颜色,请尝试以下方法:

    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage(Html.fromHtml("<font color='#FF7F27'>This is a test</font>"));
    builder.setCancelable(false);
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        }
    });
    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int which) {
        }
    });
    AlertDialog alert = builder.create();
    alert.show();
    Button nbutton = alert.getButton(DialogInterface.BUTTON_NEGATIVE);
    //Set negative button background
    nbutton.setBackgroundColor(Color.MAGENTA);
    //Set negative button text color
    nbutton.setTextColor(Color.YELLOW);
    Button pbutton = alert.getButton(DialogInterface.BUTTON_POSITIVE);
    //Set positive button background
    pbutton.setBackgroundColor(Color.YELLOW);
    //Set positive button text color
    pbutton.setTextColor(Color.MAGENTA);

结果:

结果:


如果您想更改分隔线的颜色,请尝试以下方法:

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Test Title");
        builder.setMessage(Html.fromHtml("<font color='#FF7F27'>This is a test</font>"));
        builder.setCancelable(false);
        builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            }
        });
        AlertDialog dialog = builder.create();
        dialog.show();
        try {
            Resources resources = dialog.getContext().getResources();
            int alertTitleId = resources.getIdentifier("alertTitle", "id", "android");
            TextView alertTitle = (TextView) dialog.getWindow().getDecorView().findViewById(alertTitleId);
            alertTitle.setTextColor(Color.MAGENTA); // change title text color

            int titleDividerId = resources.getIdentifier("titleDivider", "id", "android");
            View titleDivider = dialog.getWindow().getDecorView().findViewById(titleDividerId);
            titleDivider.setBackgroundColor(Color.YELLOW); // change divider color
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        Button nbutton = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
        //Set negative button background
        nbutton.setBackgroundColor(Color.MAGENTA);
        //Set negative button text color
        nbutton.setTextColor(Color.YELLOW);
        Button pbutton = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
        //Set positive button background
        pbutton.setBackgroundColor(Color.YELLOW);
        //Set positive button text color
        pbutton.setTextColor(Color.MAGENTA);

这是我的示例代码,但如果您想更改分隔线颜色,请考虑从“int titleDividerId”开头的代码部分开始。

结果:

这是代码的结果


如果您想大量自定义AlertDialog。例如添加带有自定义背景颜色的复选框,请使用以下方法:

AlertDialog.Builder alert = new AlertDialog.Builder(this);
        LinearLayout mainLayout       = new LinearLayout(this);
        mainLayout.setOrientation(LinearLayout.VERTICAL);

        LinearLayout layout1       = new LinearLayout(this);
        layout1.setOrientation(LinearLayout.HORIZONTAL);
        CheckBox cb1 = new CheckBox(getApplicationContext());
        cb1.setText("Easy");
        layout1.addView(cb1);
        layout1.setBackgroundColor(Color.BLUE);
        layout1.setMinimumHeight(50);

        LinearLayout layout2       = new LinearLayout(this);
        layout2.setOrientation(LinearLayout.HORIZONTAL);
        layout2.addView(new TextView(this));
        CheckBox cb2 = new CheckBox(getApplicationContext());
        cb2.setText("Normal");
        layout2.addView(cb2);
        layout2.setBackgroundColor(Color.CYAN);
        layout2.setMinimumHeight(50);

        LinearLayout layout3       = new LinearLayout(this);
        layout3.setOrientation(LinearLayout.HORIZONTAL);
        CheckBox cb3 = new CheckBox(getApplicationContext());
        cb3.setText("Hard");
        layout3.addView(cb3);
        layout3.setBackgroundColor(Color.GREEN);
        layout3.setMinimumHeight(50);

        mainLayout.addView(layout1);
        mainLayout.addView(layout2);
        mainLayout.addView(layout3);
        alert.setTitle("Custom alert demo");
        alert.setView(mainLayout);
        alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.cancel();
            }
        });
        alert.setPositiveButton("Done", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                Toast.makeText(getBaseContext(), "done", Toast.LENGTH_SHORT).show();
            }
        });

        alert.show();

结果:

结果

首先,我创建了一个主布局(垂直),就像您在代码中看到的那样。然后,对于每个复选框,我创建了一个水平布局。在这种情况下,您可以玩弄元素(复选框、项目等)的颜色和字体。希望它能有所帮助。


AlertDialog alert = builder.create(); - 构建器无法解析 - FredGan
首先:AlertDialog.Builder builder = new AlertDialog.Builder(this); 然后:AlertDialog alert = builder.create(); - Mohammad
你的导入中有没有 "import android.app.AlertDialog;"? - Mohammad
导入 android.support.v7.app.AlertDialog; - FredGan
将“import android.support.v7.app.AlertDialog;”改为“import android.app.AlertDialog;”。也就是删除前一行,添加后一行。 - Mohammad

10

创建对话框后:

AlertDialog dialog = builder.create();
dialog.show();
Button buttonPositive = dialog.getButton(DialogInterface.BUTTON_POSITIVE);
buttonPositive.setTextColor(ContextCompat.getColor(this, R.color.green));
Button buttonNegative = dialog.getButton(DialogInterface.BUTTON_NEGATIVE);
buttonNegative.setTextColor(ContextCompat.getColor(this, R.color.red));

1
它对我来说运行正常。但是我不知道为什么 "builder.setPositiveButton(Html.fromHtml("<font color='#FF7F27'>Yes</font>"), ..." 对我不起作用。 - Allen Vork
它对我起作用了,但请记住,您必须添加dialog.show();而不是builder.show();然后它才能正常工作。 - devu mani
这应该是最高得票的答案,而不是整个 HTML 无意义的内容。 - Mike Schvedov

5
文本颜色取自于styles.xml中设置的colorAccent值(根据您在活动中设置的样式)。

4
以下是您可以遵循的几个步骤:
1.添加一种样式,并将其命名为任何您想要的名称,在我的情况下,它是AlertDialogTheme
<style name="AlertDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert">
    <item name="colorAccent">@color/colorPrimaryDark</item>
</style>

2.在 AlertDialog.Builder() 实例的第二个参数中传递你的样式。请注意,如果你从一个 Activity 创建实例,请使用 this 替换第一个参数。

AlertDialog.Builder builder = new AlertDialog.Builder(requireActivity(), R.style.AlertDialogTheme);
  1. 查看您的修改

在此输入图片描述

在此输入图片描述


<item name="colorAccent">@color/teal_200</item> <item name="android:textColor">@color/teal_200</item> ... 对我有效。谢谢。 - yaircarreno

0
     alertDialog.setOnShowListener(OnShowListener { dialog -> 

        val buttonPositive: Button = alertDialog.getButton(DialogInterface.BUTTON_POSITIVE)
        buttonPositive.setTextColor(ContextCompat.getColor(requireContext(), R.color.orange_strong))

        val buttonNegative: Button = alertDialog.getButton(DialogInterface.BUTTON_NEGATIVE)
        buttonNegative.setTextColor(ContextCompat.getColor(requireContext(), R.color.orange_strong))

    })

    // show alert dialog
    alertDialog.show()

0

关于“Material Design”警告对话框:

<style name="MyTheme" parent="MaterialAlertDialog.MaterialComponents">
    <item name="materialAlertDialogTitleTextStyle">@style/AlertDialogTitleText</item>
    <item name="materialAlertDialogBodyTextStyle">@style/AlertDialogBodyText</item>
</style>

<style name="AlertDialogTitleText" parent="MaterialAlertDialog.MaterialComponents.Title.Text">
    <item name="android:textColor">@android:color/black</item>
</style>

<style name="AlertDialogBodyText" parent="MaterialAlertDialog.MaterialComponents.Body.Text">
    <item name="android:textColor">@android:color/white</item>
</style>

对话框应该使用 Material 构建器构建,并设置样式。

new MaterialAlertDialogBuilder(getContext(), R.style.MyTheme)
            .setTitle("Title")
            .setMessage("Message");
            

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接