使用TextView显示过长的文字时往往需要省略部分内容,但是TextView控件在maxline>=2时(即多行显示),ellipsize属性只有设置为end才有效,start\middle则无效.因此我们要对此情况进行处理.
处理方式和逻辑见如下代码和注释:
public static void ellipsize(TextView textView, String content) {
TextUtils.TruncateAt ellipsize = textView.getEllipsize();
if (ellipsize != TextUtils.TruncateAt.START && ellipsize != TextUtils.TruncateAt.MIDDLE) {
// 只处理start和middle的截断
textView.setText(content);
return;
}
int maxLine = TextViewCompat.getMaxLines(textView);
int availableWidth = textView.getWidth() - textView.getPaddingLeft() - textView.getPaddingRight();
if (maxLine < 2) {
// 单行,或没做行数限制
textView.setText(content);
} else {
List<Point> linesStart = getLineStartAndEnd(textView.getPaint()