2016-07-21 9 views
2

Wie setze ich Span für Sonderzeichen, wie \ n \ t \ r, etc? Gerade jetzt, wenn ich dies tun:EditText setSpan für Sonderzeichen

getText().setSpan(DynamicListView.mBackgroundColor, start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 

Dank

Antwort

0

nicht zu 100% sicher, dass ich die Frage verstehen, wie die Sonderzeichen '\n' nd '\r' sind Zeilenumbrüche, so wie konnten sie gestylt werden, da sie unsichtbar sein ?

Das heißt, hier ist eine Methode zum Stylen bestimmter char s in einem EditText. Sie können am Ende der Methode beliebig viele Zeichen hinzufügen und alle Instanzen dieser Zeichen werden formatiert.

//... 
editText.setText(getSpannedText(editText.getText(), `u`, `r`)); 
//... 
private static SpannableString getSpannedText(String text, char... triggers) { 

    SpannableString spanString = new SpannableString(text); 

    for (int i = 0; i < spanString.length(); i++) { 
     for (char trigger : triggers) { 
      if (spanString.charAt(i) == trigger) { 
       spanString.setSpan(new ForegroundColorSpan(Color.CYAN), i, i+1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); 
      } 
     } 
    } 

    return spanString; 

} 
+0

Ja, ich bin fast gleiche Lösung. Ja, \ n und \ r sind unsichtbar, aber \ t ist sichtbar und sieht aus wie Leerzeichen, aber Span funktioniert nicht genau für dieses Zeichen "\ t" – molds

+0

@ user3901709 Ahh, ich verstehe. Ist es praktisch, das "" Zeichen vor dem Einstellen der Spanne durch etwas anderes zu ersetzen, z. B. ein Leerzeichen? d. h. 'string = string.replace ('\ t', '');' – PPartisan

+0

Leider kann ich das nicht, bcz später muss ich diese Daten in Datei speichern (es ist Datei-Reader), und \ t wird dann verpasst – molds

0

auf meiner Seite Feste von Draw-Funktionen, hier ist der Code von EditText:

if(getText().toString().substring(start,end).indexOf("\t")>=0 
      || getText().toString().substring(start,end).indexOf("\n")>=0 
      || getText().toString().substring(start,end).indexOf("\r")>=0) { 
     TextPaint paint = new TextPaint(); 
     paint.setStyle(Paint.Style.FILL); 
     paint.setColor(mBackgroundColor); 
     paint.bgColor = mBackgroundColor; 

     Layout layout = getLayout(); 
     int line = layout.getLineForOffset(start); 
     int baseline = layout.getLineBaseline(line); 
     int ascent = layout.getLineAscent(line); 
     float x = layout.getPrimaryHorizontal(start); 
     float y = baseline + ascent; 

     Rect rect = new Rect(); 
     //rect.set(start, 0, Math.round(layout.getSecondaryHorizontal(end)), getLineHeight()+5); 
     rect.set(start, 0, Math.round(layout.getSecondaryHorizontal(end)), getLineHeight()+5); 
     rect.offset(Math.round(x), Math.round(y)); 

     Log.d("debug","tabs " + rect.toString()); 
     canvas.drawRect(rect, paint); 
    } 
Verwandte Themen