2010-10-25 8 views
7

Je dois dessiner du texte sur un canevas (d'une vue personnalisée), et je dois d'abord le découper à une largeur maximum, en ajoutant une ellipse à la fin si nécessaire. Je vois que vous pouvez le faire pour un TextView, mais je veux le faire dans une vue personnalisée onDraw() sans avoir à ajouter une vue enfant.dessiner du texte "ellipsisé" sur une toile

Est-ce possible? Je sais que je pourrais mesurer la corde, couper un personnage, mesurer à nouveau, etc. jusqu'à ce que la taille soit la bonne ... et je suis sûr qu'il y a aussi des moyens plus efficaces ... mais je voudrais éviter de réinventer cette roue si je peux.

Répondre

16

Jetez un coup d'œil à TextUtils.ellipsize(). Je pense que c'est exactement ce que tu veux. Fondamentalement, vous suffit de dire la quantité d'espace disponible et en utilisant les autres informations d'état, il va créer le texte correct pour vous. :)

+0

cool, qui l'a fait grâce – rob

+1

serait bien si vous pouviez montrer un code sur la façon dont vous avez accompli ce rob ... merci à l'avance. :) – Wesley

+2

Peut-il être utilisé pour le texte multiligne? Il semble ne prendre en charge qu'un seul texte basé sur la seule largeur. –

10

est un exemple:

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

merci cher par exemple, vous avez économisé mon temps !!!! –

Questions connexes