优雅的给显示超长字符串的TextView加上省略号
TextView应该是Android开发中使用频次非常高的一个基础控件。对于长文本,TextView默认的处理方案是换行显示,对于只需要单行显示的TextView加上android:singleLine="true"即可让TextView单行显示,同时如果文本超过一行自动加上省略号,但是如果UI是类似这种呢?再只使用一个控件的情况下,实现的这样的显示目前能想到的有一下几种。 计算文字行数 第一种方法思路很简单,要实现这种效果只需要在还没有进行settext方法之前就先判断一下文本是否超长,如果超过一行的长度就把第一行取出来,进行手动拼接后(第一行文本+…等X人)设置到TextView上 计算文本是否有多行 TextView自身就限制行数的API所以,判断文本有几行,这代码TextView肯定已经有了,我们打开TextView的源代码,果不其然 ··· final StaticLayout.Builder layoutBuilder = StaticLayout.Builder.obtain( text, 0, text.length(), mTempTextPaint, Math.round(availableSpace.right)); layoutBuilder.setAlignment(getLayoutAlignment()) .setLineSpacing(getLineSpacingExtra(), getLineSpacingMultiplier()) .setIncludePad(getIncludeFontPadding()) .setBreakStrategy(getBreakStrategy()) .setHyphenationFrequency(getHyphenationFrequency()) .setJustificationMode(getJustificationMode()) .setMaxLines(mMaxMode == LINES ? mMaximum : Integer.MAX_VALUE) .setTextDirection(getTextDirectionHeuristic()); final StaticLayout layout = layoutBuilder.build(); // Lines overflow. if (maxLines != -1 && layout.getLineCount() > maxLines) { return false; } ··· layout....