textview多行设置ellipsize="end"并不显示省略号。这是android4.0以下系统的bug,google发现有个家伙写了个开源控件
http://android-textview-multiline-ellipse.googlecode.com/ 号称解决该问题。但实际测试还是存在问题,只好自己另寻找解决方案。下面的代码替换掉该控件的resetText函数,几乎可实现多行显示省略号 。
private void resetText() {
String workingText = fullText;
boolean ellipsized = false;
int maxLines = this.maxLines > 0 ? this.maxLines : 1;
if (maxLines <= getLineCount()) {
Paint paint = getPaint();
float mw = (getMeasuredWidth() - getPaddingLeft() - getPaddingRight())
* maxLines;
if (paint.measureText(workingText) > mw) {
int ei = (int) ((mw - paint.measureText("...")) / paint
.getTextSize()) - 1;
if (ei < workingText.length()) {
workingText = workingText.substring(0, ei - 1) + "...";
}
}
ellipsized = true;
}
if (!workingText.equals(getText())) {
programmaticChange = true;
try {
setText(workingText);
} finally {
programmaticChange = false;
}
}
isStale = false;
if (ellipsized != isEllipsized) {
isEllipsized = ellipsized;
for (EllipsizeListener listener : ellipsizeListeners) {
listener.ellipsizeStateChanged(ellipsized);
}
}
}
实际这个解决方法还是有点小问题。什么问题请留意下文分解^_^。