2015-01-09 54 views
0

那是我当前的代码:的Android EditText上突出显示多个单词

public void markWords(String str) { 
 
     str = str.replace("\n", " <br>"); 
 
     int spamLength = 20; 
 
     String colorSpam = "#ED9E15"; 
 
     String colorBad = "red"; 
 
     int i = 0; 
 

 
     for(String word : str.split(" ")) { 
 
      if(word.length() > spamLength) { 
 
       str = str.replace(word, "<font color='"+colorSpam+"'>"+word+"</font>"); 
 
       i++; 
 
      } 
 
     } 
 

 
     for(String bad : blacklist) { 
 
      if (!bad.startsWith("#") && str.toLowerCase().contains(bad.toLowerCase())) { 
 
       for (String word : str.split(" ")) { 
 
        if (word.toLowerCase().contains(bad.toLowerCase())) { 
 
         String rightWord = getRightCased(word, bad); 
 
         if (word.length() > spamLength) { 
 
          str = str.replace(rightWord, "</font><font color='"+colorBad+"'>" + rightWord + "</font><font color='"+colorSpam+"'>"); 
 
         } else { 
 
          str = str.replace(rightWord, "<font color='"+colorBad+"'>" + rightWord + "</font><font color='black'></font>"); 
 
         } 
 
         i++; 
 
        } 
 
       } 
 
      } 
 
     } 
 

 
     text.setText(Html.fromHtml(str), TextView.BufferType.SPANNABLE); 
 
     String gefunden = "Es wurden " + i + " Wörter gefunden."; 
 
     if(i == 1) { 
 
      gefunden = "Es wurde " + i + " Wort gefunden."; 
 
     } 
 
      Toast msg = Toast.makeText(getApplicationContext(), gefunden, Toast.LENGTH_SHORT); 
 
      msg.show(); 
 
    } 
 

 
    public String getRightCased(String str, String bad) { 
 
     String string = str; 
 

 
     for(int i = 1; i < str.length(); i++) { 
 
      if(!string.toLowerCase().startsWith(bad.toLowerCase())) { 
 
       string = string.substring(1); 
 
      } 
 
     } 
 
     for(int i = 1; i < str.length(); i++) { 
 
      if(!string.toLowerCase().endsWith(bad.toLowerCase())) { 
 
       string = string.substring(0, string.length() - 1); 
 
      } 
 
     } 
 
     return string; 
 
    }

它的工作原理是第一次,但崩溃时的文本包含HTML标记,或者一些空白空间被添加到文本,然后再次突出显示单词...我如何突出显示多个单词而不使用html标记?

回答

0

实际使文本出现在TextView(或EditText)中的样式的方法是创建Spans,如ColorSpannable。这就是HTML.fromHtml()为你所做的。使用HTML是最简单的方法,但正如你所指出的,如果你试图在HTML文本上做或者反复做这些事情,很快就会出现问题。如果您手动创建自己的跨度创作,这将是一个痛苦的脖子,但你会从不使用HTML来避免这些问题。