首先,自定义一个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(安卓)ProgressDialog的使用
  2. Android为Notification加上一个进度条
  3. Android:使用SpannableString实现图片替换相应的文字
  4. Android设置全屏的两种方法
  5. Android(安卓)代码生成界面Sample
  6. Android(安卓)中保存图片的代码
  7. MpAndroidChart简单用法 属性总结
  8. android 代码创建快捷方式
  9. Android分享功能

随机推荐

  1. Android(安卓)面试 100 题
  2. Android 获取imu数据
  3. Android 实现监听事件的几种方法
  4. Android 播放声音
  5. Android全局异常处理
  6. Android访问WEBAPI,传递json
  7. android md5
  8. Android Q 版本新的网络状况判断方式
  9. 解决org.apache.http.HttpResponse爆红
  10. 获取系统内存