我想要一个调整字体大小的TextView,以便视图中的文本将自动扩展(或缩小)以填充视图的全部宽度。我想我也许可以做到这一点通过创建一个定制的TextView其覆盖的onDraw()如下:TextView.onDraw导致无限循环
public class MaximisedTextView extends TextView {
// (calls to super constructors here...)
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
TextPaint textPaint = this.getPaint();
Rect bounds = new Rect();
String text = (String)this.getText(); // current text in view
float textSize = this.getTextSize(); // current font size
int viewWidth = this.getWidth() - this.getPaddingLeft() - this.getPaddingRight();
textPaint.getTextBounds(text, 0, text.length(), bounds);
int textWidth = bounds.width();
// reset font size to make text fill full width of this view
this.setTextSize(textSize * viewWidth/textWidth);
}
}
然而,这将应用到一个死循环(与文本的大小不断增长,每一次稍有萎缩!),所以我很清楚这是错误的。对setTextSize()的调用是否会触发无效,从而无休止地再次调用onDraw?
有没有办法阻止递归调用(如果这是发生了什么)?或者我应该以完全不同的方式进行探讨?
太棒了!请参阅下面的完整回复。谢谢,克里斯 – ChrisV 2010-07-08 22:20:46