2016-05-30 2 views
2

У меня есть строка под названием nota. Есть несколько текстов. Я хочу изменить цвет конкретных слов из фразы, которая содержит * * между ними. Пример: Это удивительно *. Слово awesome должно иметь желтый цвет, а символы * * должны быть удалены (как если бы * было форматированием мини-Markdown). Я пробовал этот код, но он не работал. Мне нужна помощь.Android пытается заменить символ и изменить цвет слова

if(nota.contains("* *")){ 

//nota = nota.replace("* *",""); 
Pattern pattern = Pattern.compile("\\*.*\\*"); 
Matcher matcher = pattern.matcher(nota); 
// Check all occurrences 
matcher.find(); 


Spannable spannable = new SpannableString(nota); 
spannable.setSpan(
//new ForegroundColorSpan(Color.YELLOW), nota.indexOf("* *"), nota.indexOf("* *") + "* *".length(),  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 
new ForegroundColorSpan(Color.YELLOW), matcher.start() + 1 , matcher.end() - 1,  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
txtnota.setText(spannable); 
} 

ответ

0

Использование .Contains("* *") бы обнаружить следующие строки:

* * awesome! 
Hello boy! * * 
Hello* * boy! 

Но не:

*awesome* 

Попробуйте изменить свой код:

if(nota.contains("*") && nota.replace("*","").contains("*")){ 

//nota = nota.replace("* *",""); 
Pattern pattern = Pattern.compile("\\*.*\\*"); 
Matcher matcher = pattern.matcher(nota); 
// Check all occurrences 
matcher.find() 


Spannable spannable = new SpannableString(nota); 
spannable.setSpan(
//new ForegroundColorSpan(Color.YELLOW), nota.indexOf("* *"), nota.indexOf("* *") + "* *".length(),  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE 
new ForegroundColorSpan(Color.YELLOW), matcher.start() + 1 , matcher.end() - 1,  Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
txtnota.setText(spannable); 
} 

Что nota.replace("*","").contains("*") в основном делает это, чтобы проверить, если у вас есть 2 astherics *

+0

Я попробовал ваш код. Я выполнил ваши шаги и поставил '* awesome *', но ничего не изменилось. Астерики видны, и желтый цвет не вставлен для удивительного. –

1

я решил его таким образом:

if(nota != null){ 
     int firstIndex = nota.indexOf("*"); 
     if (firstIndex >= 0) { 
      nota = nota.replaceFirst("[*]{1}", ""); 
      int secIndex = nota.indexOf("*"); 
      if (secIndex >= 0) { 
       nota = nota.replaceFirst("[*]{1}", ""); 

       Spannable spannable = new SpannableString(nota); 
       spannable.setSpan(new ForegroundColorSpan(Color.YELLOW), firstIndex, secIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       spannable.setSpan(new android.text.style.StyleSpan(android.graphics.Typeface.BOLD_ITALIC), firstIndex, secIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
       txtnota.setText(spannable); 
      } 
     } 
} 
Смежные вопросы