2010-10-25 10 views
7

Ich muss Text auf eine Leinwand (einer benutzerdefinierten Ansicht) zeichnen, und muss es zuerst auf eine maximale Breite trimmen, Hinzufügen einer Ellipse am Ende, wenn nötig. Ich sehe, Sie können es für eine TextView tun, aber ich möchte es in einer benutzerdefinierten Ansicht onDraw() tun, ohne eine untergeordnete Ansicht hinzuzufügen.Zeichne Text "ellipsized" auf eine Leinwand

Ist das möglich? Ich weiß, dass ich die Saite messen, einen Charakter abschneiden, wieder messen kann, usw., bis es die richtige Größe hat ... und ich bin mir sicher, dass es auch effizientere Wege gibt ... aber ich möchte nicht neu erfinden das Rad, wenn ich kann.

Antwort

16

Werfen Sie einen Blick auf TextUtils.ellipsize(). Ich denke, es ist genau das, was du willst. Im Grunde sagen Sie ihm nur den verfügbaren Platz und verwenden die anderen Statusinformationen, um den richtigen Text für Sie zu erstellen. :)

+0

cool, dass es tat dank – rob

+1

wäre schön, wenn Sie einen Code auf zeigen könnten, wie Sie diese rob erreicht ... Vielen Dank im Voraus. :) – Wesley

+2

Kann dies für mehrzeiligen Text verwendet werden? Es scheint nur einen einzelnen Linientext nur basierend auf der Breite zu unterstützen. –

10

Hier ist ein Beispiel:

TextPaint textPaint = new TextPaint();//The Paint that will draw the text 
textPaint.setColor(Color.WHITE);//Change the color if your background is white! 
textPaint.setStyle(Paint.Style.FILL); 
textPaint.setAntiAlias(true); 
textPaint.setTextSize(20); 
textPaint.setTextAlign(Paint.Align.LEFT); 
textPaint.setLinearText(true); 

Rect b = getBounds(); //The dimensions of your canvas 
int x0 = 5;   //add some space on the left. You may use 0 
int y0 = 20;   //At least 20 to see your text 
int width = b.getWidth() - 10; //10 to keep some space on the right for the "..." 
CharSequence txt = TextUtils.ellipsize("The text", textPaint, width, TextUtils.TruncateAt.END); 
canvas.drawText(txt, 0, txt.length(), x0, y0, textPaint); 
+1

danke liebe zum beispiel, du hast meine zeit gerettet !!!! –