在alertdialog中设置2种不同的文本颜色

时间:2017-01-12 15:29:31

标签: android alertdialog spannablestring spannable

我试图在alertdialog中为文本设置2种不同的颜色,通过spannable但不幸的是所有文本都保持白色。 字符串'消息' 应为绿色,字符串'message2'为正常白色

如果我删除下面一行的第二个字符串 message2 ,一切都应该是这样。

.setMessage(ssBuilder + message2)

对话框的代码:

public static AlertDialog createDarkDialog(Context context, String title, String message, String message2) {
        ContextThemeWrapper ctw = new ContextThemeWrapper(context, R.style.DarkAlert);

        SpannableStringBuilder ssBuilder = new SpannableStringBuilder(message);
        RelativeSizeSpan largeSizeText = new RelativeSizeSpan(1.0f);
        ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.GREEN);
        ssBuilder.setSpan(largeSizeText, 0, message.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        ssBuilder.setSpan(foregroundColorSpan, 0, message.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

        AlertDialog ad = new AlertDialog.Builder(ctw)
                .setTitle(title)
                .setMessage(ssBuilder + message2)

                .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        // Do something
                        dialog.dismiss();
                    }
                })
                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                })
                .setCancelable(false)
                .create();
        return ad;
    }

我如何调用对话框:

Utils.createDarkDialog(mContext, "Title:", "This should be green" + "\n\n", "and this should be white.").show();

2 个答案:

答案 0 :(得分:0)

如果其他人遇到这样的问题,我通过更换这一行解决了这个问题:

.setMessage(ssBuilder + message2)

这一个:

.setMessage(ssBuilder.append("\n\n" + message2))

现在它可以正常工作;)

答案 1 :(得分:0)

我的猜测,在setMessage(ssBuilder + message2)中,java会将对象强制转换为相同的类型(ssBuilder是SpannableStringBuilder,message2是String),然后将它们连接起来。在这种强迫期间,事情变得混乱。

您可以尝试根据需要为message2(假设ssBuilder2)创建一个SpannableStringBuilder,然后连接调用setMessage(ssBuilder + ssBuilder2)

相关问题