在项目中要动态给TextView设置文字,文字太多,TextView大小有限又不能设置为滚动。网上找了一下很多人推荐用一个开源的TextViewMultilineEllipse,这个控件的确可以达到这种效果,但它仅仅解决了这个问题,却同时舍弃了TextView很多其他强大的功能,比如设置行距等。
我的思路是为TextView固定行数,被盖住一部分的最后一行干脆不显示,但我的TextView的大小也是不固定的,于是只能动态设置行数。我的做法是在onDraw()函数中计算该TextView能显示多少行,然后调用setLines(),进行设置。代码如下:
private boolean calculatedLines = false;
@Override
protected void onDraw(Canvas canvas) {
if(!calculatedLines){
calculateLines();
calculatedLines = true;
}
super.onDraw(canvas);
}
private void calculateLines() {
int mHeight = getMeasuredHeight();
int lHeight = getLineHeight();
int lines = mHeight / lHeight;
setLines(lines);
}