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

Android 在alertdialog中设置2种不同的文本颜色,android,android-alertdialog,spannablestring,spannable,Android,Android Alertdialog,Spannablestring,Spannable,我试图在alertdialog中为文本设置两种不同的颜色,但不幸的是,所有文本都保持白色。 字符串'message'应该是绿色的,字符串'message2'应该是白色的 如果我删除了下一行中的第二个字符串message2,则一切正常 .setMessage(ssBuilder + message2) 对话框的代码: public static AlertDialog createDarkDialog(Context context, String title, String message,

我试图在alertdialog中为文本设置两种不同的颜色,但不幸的是,所有文本都保持白色。 字符串'message'应该是绿色的,字符串'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();
如何调用该对话框:

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

如果其他人遇到这样的问题,我通过替换以下行来解决:

.setMessage(ssBuilder + message2)
关于这一点:

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

现在它可以正常工作了;)

我猜,在
setMessage(ssBuilder+message2)
java将强制对象为相同的类型(ssBuilder是SpannableStringBuilder,message2是String),然后连接它们。在这次胁迫中,事情变得一团糟


您可以尝试为message2(比如ssBuilder2)创建一个按需格式化的SpannableStringBuilder,然后连接call
setMessage(ssBuilder+ssBuilder2)

是的,您在我编写时回答了:D我刚重新加载页面setMessage(ssBuilder+ssBuilder2)时看到的错误,您无法在SpannableStringBuilder上应用+运算符。