2017-01-12 7 views
1

Я пытаюсь установить 2 разных цвета текста в alertdialog, через spannable, но, к сожалению, весь текст остается белым. Строка 'сообщение'должно быть зеленым и строка 'сообщение2' нормальный белый.Установите 2 разных цвета текста в alertdialog

Если я удалить вторую строку 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(); 

ответ

0

Если кто-то еще encouters такая проблема, я решил, заменив строку:

.setMessage(ssBuilder + message2) 

с этим:

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

Сейчас она работает, как это должно быть;)

0

Мое предположение, в setMessage(ssBuilder + message2) Java будет принуждать объекты в той же типа (ssBuilder является SpannableStringBuilder и message2 является String), а затем объединить их. Во время этого принуждения все перепуталось.

Вы можете попробовать создать SpannableStringBuilder для сообщения2 (скажем, ssBuilder2), отформатированного так, как вы хотите, а затем объединить вызов setMessage(ssBuilder + ssBuilder2).

+0

Thx Davi, но я уже решил это сам, посмотрю мой собственный anser. – Simon

+0

Да, вы когда-то писали: D Я видел, когда я перезагрузил страницу –