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); } } }
实际这个解决方法还是有点小问题。什么问题请留意下文分解^_^。