【问题标题】:Set 2 different text colors in alertdialog在 alertdialog 中设置 2 种不同的文本颜色
【发布时间】:2017-01-12 15:29:31
【问题描述】:

我正在尝试为警报对话框中的文本设置 2 种不同的颜色,通过可扩展但不幸的是所有文本都保持白色。 字符串 '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();

【问题讨论】:

    标签: android android-alertdialog spannablestring spannable


    【解决方案1】:

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

    .setMessage(ssBuilder + message2)
    

    用这个:

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

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

    【讨论】:

      【解决方案2】:

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

      您可以尝试为 message2(比如说 ssBuilder2)创建一个 SpannableStringBuilder,按照您的需要进行格式化,然后连接调用 setMessage(ssBuilder + ssBuilder2)

      【讨论】:

      • 是的,你在我写的时候回答了 :D 我在重新加载页面时看到了
      • setMessage (ssBuilder + ssBuilder2) 错误,您不能在 SpannableStringBuilder 上应用 + 运算符。
      猜你喜欢
      • 2015-06-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-13
      • 2013-10-19
      • 2020-09-01
      • 1970-01-01
      • 2019-04-11
      • 2016-10-30
      相关资源
      最近更新 更多