2016-08-05 35 views
2

Ich möchte einen Bereich am Ende jeder Zeile in mehrzeiligen Zeichenfolgen hinzufügen. Ich habe versucht, nur ein Zeichen zu zeichnen, aber nichts erschien am Ende der Zeilen. Aber wenn ImageSpan gesetzt ist, kann es Zeilenhöhe erhöhen, aber immer noch kein Bild an der Linie.Wie ImageSpan am Ende der Zeilen in mehrzeiligen Text hinzugefügt werden

private void addSpansAtEnd() { 
    String s = "First line\nSecond line\Third line\n"; 
    SpannableStringBuilder e = new SpannableStringBuilder(s); 
    int stop = start + count; 
    for (int start = -1; 
     (start = s.indexOf("\n", start)) > -1 && start < stop; 
     ++start) { 
      e.setSpan(
        /*new ImageSpan(getContext(), R.drawable.ic_line),*/ 
        new NewLineSpan(), 
        start, 
        start + 1, 
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 
} 

/* Trying to replace \\n with other character. */ 
private class NewLineSpan extends ReplacementSpan { 
    @Override 
    public int getSize(
      Paint paint, 
      CharSequence text, 
      int start, 
      int end, 
      Paint.FontMetricsInt fm) { 
     return 0; 
    } 

    @Override 
    public void draw(
      Canvas canvas, 
      CharSequence text, 
      int start, 
      int end, 
      float x, 
      int top, 
      int y, 
      int bottom, 
      Paint paint) { 
     paint.setColor(0xFF666666); 
     canvas.drawText("o", x, y, paint); 
    } 
} 

Wie zeichne ich am Ende der Linien?

+0

Ich vermute, Sie ein Bild wie dieses wollen: ↲ (Welche BTW Sie ein Zeichen verwenden können, wie Ich habe es anstelle eines Bildes gemacht. Die Frage ist also, willst du es nur auf deinen "harten" CR/LFs, dh wo du "\ n" in dein Beispiel steckst (was ¶ statt ↲ sein sollte), oder auch auf der "weiche" CR/LFs, dh wo hat 'TextView' entschieden, Ihren mehrzeiligen Text zu umbrechen? Weil die Handhabung der weichen CR/LFs eine zusätzliche Herausforderung darstellt. –

+0

↲ ist \ u21B5, ¶ ist \ u00B6, leider \ u21B5 ist nicht in Roboto Schriftart, also nehme ich an, deshalb brauchen Sie ein Bild. –

+0

Ich möchte nur Zeilenenden zeigen und die ursprüngliche Zeichenfolge nicht unterbrechen. Bild oder Zeichen, aber nur mit Spannen. – Pavel

Antwort

1

Eine Spanne auf einem Zeilenumbruch erscheint irgendwie komisch. Ein Zeilenumbruch verläuft über zwei Zeilen, hat jedoch keine Breite. Ich denke, man könnte mehr Glück haben, wenn Sie ein Leerzeichen, bevor dann die Newline die Spanne um den Raum stellen:

for (int start = -1; 
    (start = s.indexOf("\n", start)) > -1 && start < stop; 
    start += 2) { // increment by 2 to skip the displaced newline 
     e.insert(start, " "); // insert a space for the span 
     e.setSpan(new ImageSpan(getContext(), R.drawable.ic_line), 
       start, 
       start + 1, 
       Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
     stop++; // because a space was added 
} 
+0

Ich versuche zu vermeiden, SpannableString zu bearbeiten. – Pavel