2010-10-25 17 views
7

Necesito dibujar texto en un lienzo (de una vista personalizada), y necesito recortarlo primero hasta un ancho máximo, agregando una elipsis al final si es necesario. Veo que puede hacerlo para un TextView, pero quiero hacerlo dentro de una vista personalizada onDraw() sin tener que agregar una vista secundaria.dibujar texto "ellipsized" en un lienzo

¿Esto es posible? Sé que podría medir la cuerda, cortar un personaje, medir de nuevo, etc. hasta que tenga el tamaño correcto ... y estoy seguro de que también hay maneras más eficientes ... pero me gustaría evitar reinventarme. esa rueda si puedo.

Respuesta

16

Eche un vistazo a TextUtils.ellipsize(). Creo que es exactamente lo que quieres. Básicamente, solo dígale la cantidad de espacio disponible y utilizando la información de otro estado, creará el texto correcto para usted. :)

+0

fresco, que lo hizo gracias – rob

+1

sería bueno si pudiera mostrar algo de código de cómo se logró esto robar ... gracias por adelantado. :) – Wesley

+2

¿Se puede usar esto para texto de varias líneas? Parece que solo es compatible con texto de una sola línea solo en función del ancho. –

10

Aquí se muestra un ejemplo:

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

gracias querido, por ejemplo, me salvaste el tiempo !!!! –

Cuestiones relacionadas