android中判断关于文本展示是否出现省略号的判断

来源:互联网 发布:亚马逊的大数据行动 编辑:程序博客网 时间:2024/05/18 04:54

对于一些文本展示类需求,经常会要求设置最大展示行数(maxLines),当文本长度大于要展示的最大内容时出现省略号,同时根据是否出现省略号做一些其他操作,比如显示"全文"等字眼,然后要求点击全文查看全部内容。这个时候就需要判断文本是否已经溢出最大展示量,下面提供自己的一种实现方法,这里在布局文件中设置TextView的最大行数为5,android:maxLines=5。

实现:

Layout layout = ((TextView) holder.getView(R.id.content)).getLayout();if (layout != null) {int lineCount = layout.getLineCount();//奇葩的小米note2居然会返回大于5(最大行数)的值if (lineCount > 5) {//小米note2的兼容处理holder.setVisibility(R.id.content_showfull, View.VISIBLE);} else {int ellipsisCount = layout.getEllipsisCount(lineCount - 1);//小米note2下返回0if (ellipsisCount > 0) {holder.setVisibility(R.id.content_showfull, View.VISIBLE);} else {holder.setVisibility(R.id.content_showfull, View.GONE);}}} else {ViewTreeObserver observer = holder.getView(R.id.content).getViewTreeObserver();if (observer.isAlive()) {observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {@Overridepublic boolean onPreDraw() {Layout layout = ((TextView) holder.getView(R.id.content)).getLayout();if (layout != null) {int lineCount = layout.getLineCount();if (lineCount > 5) {holder.setVisibility(R.id.content_showfull, View.VISIBLE);} else {int ellipsisCount = layout.getEllipsisCount(lineCount - 1);if (ellipsisCount > 0) {holder.setVisibility(R.id.content_showfull, View.VISIBLE);} else {holder.setVisibility(R.id.content_showfull, View.GONE);}}} else {holder.setVisibility(R.id.content_showfull, View.GONE);}try {(holder.getView(R.id.content).getViewTreeObserver()).removeOnPreDrawListener(this);} catch (Exception e) {e.printStackTrace();}return true;}});}}


0 0