首先,自定义一个TextView 

package com.hx.readeralliance.customView;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.graphics.Canvas;import android.text.Layout;import android.text.Layout.Alignment;import android.text.StaticLayout;import android.text.TextUtils.TruncateAt;import android.util.AttributeSet;import android.widget.TextView;  public class EllipsizingTextView extends TextView {      private static final String ELLIPSIS = "...";        public interface EllipsizeListener {          void ellipsizeStateChanged(boolean ellipsized);      }        private final List ellipsizeListeners = new ArrayList();      private boolean isEllipsized;      private boolean isStale;      private boolean programmaticChange;      private String fullText;      private int maxLines = -1;      private float lineSpacingMultiplier = 1.0f;      private float lineAdditionalVerticalPadding = 0.0f;        public EllipsizingTextView(Context context) {          super(context);      }        public EllipsizingTextView(Context context, AttributeSet attrs) {          super(context, attrs);      }        public EllipsizingTextView(Context context, AttributeSet attrs, int defStyle) {          super(context, attrs, defStyle);      }        public void addEllipsizeListener(EllipsizeListener listener) {          if (listener == null) {              throw new NullPointerException();          }          ellipsizeListeners.add(listener);      }        public void removeEllipsizeListener(EllipsizeListener listener) {          ellipsizeListeners.remove(listener);      }        public boolean isEllipsized() {          return isEllipsized;      }        @Override      public void setMaxLines(int maxLines) {          super.setMaxLines(maxLines);          this.maxLines = maxLines;          isStale = true;      }        public int getMaxLines() {          return maxLines;      }        @Override      public void setLineSpacing(float add, float mult) {          this.lineAdditionalVerticalPadding = add;          this.lineSpacingMultiplier = mult;          super.setLineSpacing(add, mult);      }        @Override      protected void onTextChanged(CharSequence text, int start, int before, int after) {          super.onTextChanged(text, start, before, after);          if (!programmaticChange) {              fullText = text.toString();              isStale = true;          }      }        @Override      protected void onDraw(Canvas canvas) {          if (isStale) {              super.setEllipsize(null);              resetText();          }          super.onDraw(canvas);      }        private void resetText() {          int maxLines = getMaxLines();          String workingText = fullText;          boolean ellipsized = false;          if (maxLines != -1) {              Layout layout = createWorkingLayout(workingText);              if (layout.getLineCount() > maxLines) {                  workingText = fullText.substring(0, layout.getLineEnd(maxLines - 1)).trim();                  while (createWorkingLayout(workingText + ELLIPSIS).getLineCount() > maxLines) {                      int lastSpace = workingText.lastIndexOf(' ');                      if (lastSpace == -1) {                          break;                      }                      workingText = workingText.substring(0, lastSpace);                  }                  workingText = workingText + ELLIPSIS;                  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);              }          }      }        private Layout createWorkingLayout(String workingText) {          return new StaticLayout(workingText, getPaint(), getWidth() - getPaddingLeft() - getPaddingRight(),                  Alignment.ALIGN_NORMAL, lineSpacingMultiplier, lineAdditionalVerticalPadding, false);      }        @Override      public void setEllipsize(TruncateAt where) {          // Ellipsize settings are not respected       }  }  

然后,在布局文件中引用该TextView

最后,在代码中设置最大的行数

viewHolder.txArticleDes.setMaxLines(5);viewHolder.txArticleDes.setEllipsize(TextUtils.TruncateAt.valueOf("END"));


   

更多相关文章

  1. Android 中保存图片的代码
  2. Android 代码生成界面Sample
  3. Android 代码监控apk安装,卸载,替换
  4. android 代码创建快捷方式
  5. Android开发人员不得不收集的代码
  6. Android 实现SHA1加密算法代码
  7. android 动态 布局

随机推荐

  1. Android(安卓)性能优化杂谈(开篇)
  2. Android破解锁屏密码(已root)
  3. Android(安卓)studio和Eclipse分别生成ja
  4. 打造通用的Android下拉刷新组件(适用于Li
  5. Android异步消息处理机制 深入理解Looper
  6. webView程序 第一次加载页面是出现白屏或
  7. Android电话薄
  8. Android(安卓)多线程:使用Thread和Handler
  9. Android仿微信气泡聊天界面设计
  10. Android(安卓)开发者,如何提升自己的职场