ExpandableTextViewExample
ExpandableTextViewExample copied to clipboard
收起省略号没了
展开再收起后省略号没了?
对,折叠状态时没有省略号,求解决方案
设置一个String str_text,在setText方法中进行赋值。
点击时 if (mCollapsed) {//收缩 mTvContent.setMaxLines(mMaxCollapsedLines); valueAnimator = new ValueAnimator().ofInt(getHeight(), mCollapsedHeight); int lineEndIndex = mTvContent.getLayout().getLineEnd(mMaxCollapsedLines-1);//获取被截断的字符长度 String text = str_text.subSequence(0, lineEndIndex-1) + "...";//手动加上省略号 mTvContent.setText(text); } else {//展开 valueAnimator = new ValueAnimator().ofInt(getHeight(), getHeight() + mTextHeightWithMaxLines - mTvContent.getHeight()); mTvContent.setText(str_text); }
在xue12311的方案上稍微修改了下 修改OnClick方法里的代码
-
if (mCollapsed) { valueAnimator = new ValueAnimator().ofInt(getHeight(), mCollapsedHeight); } else { valueAnimator = new ValueAnimator().ofInt(getHeight(), getHeight() + mTextHeightWithMaxLines - mTvContent.getHeight()); }
2.valueAnimator.addListener的回调里
@Override
public void onAnimationStart(Animator animator) {
if (!mCollapsed) {
mTvContent.setText(str_text);
}
}
@Override
public void onAnimationEnd(Animator animator) {
// 动画结束后发送结束的信号
/// clear the animation flag
if (mCollapsed) {
int lineEndIndex = mTvContent.getLayout().getLineEnd(mMaxCollapsedLines - 1);//获取被截断的字符长度
String text = str_text.subSequence(0, lineEndIndex - 1) + "...";//手动加上省略号
mTvContent.setText(text);
}
mAnimating = false;
// notify the listener
if (mListener != null) {
mListener.onExpandStateChanged(mTvContent, !mCollapsed);
}
}
这样动画会和之前一样连贯,不会文字突变
牛逼~
收起来加省略号其实还有一个更简单的办法:以上的方法会使文字排版改变
mTv.setMaxLines(mMaxCollapsedLines); mTv.setEllipsize(TextUtils.TruncateAt.END);
TextView 应该这么写
<TextView
android:id="@+id/expandable_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lineSpacingExtra="5dp"
android:ellipsize="end"
android:text=""
android:textColor="@color/white"
android:textSize="14sp"
/>