我需要將文本繪製到自定義視圖的畫布上,並且需要先將其修剪爲最大寬度,並在必要時在末尾添加省略號。我看到你可以爲TextView做,但我想在自定義視圖的onDraw()中做,而不必添加子視圖。將文本「橢圓化」到畫布上
這可能嗎?我知道我可以測量字符串,砍掉一個字符,再次測量等等,直到尺寸合適......並且我確信還有更有效的方法......但是我想避免重新創建如果我可以的話。
我需要將文本繪製到自定義視圖的畫布上,並且需要先將其修剪爲最大寬度,並在必要時在末尾添加省略號。我看到你可以爲TextView做,但我想在自定義視圖的onDraw()中做,而不必添加子視圖。將文本「橢圓化」到畫布上
這可能嗎?我知道我可以測量字符串,砍掉一個字符,再次測量等等,直到尺寸合適......並且我確信還有更有效的方法......但是我想避免重新創建如果我可以的話。
看看TextUtils.ellipsize()
。我認爲這正是你想要的。基本上你只是告訴它可用的空間量,並使用其他狀態信息,它會爲你創建正確的文本。 :)
下面是一個例子:
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);
,你節省了我的時間! – 2015-12-18 12:02:13
冷靜,那這樣做是由於 – rob 2010-10-25 18:42:00
將是很好,如果你能提前顯示你如何完成這個搶一些代碼...謝謝。 :) – Wesley 2012-07-06 14:24:25
這可以用於多行文本嗎?它似乎只支持基於寬度的單行文本。 – 2012-09-28 22:39:17