最近,写Android代码遇到的需求,需要文本可折叠,通过参考借鉴网上的资料和思路,自己写了一个。写篇博客记录下来,免得以后要用的时候,又要百度。
需求:在折叠状态下,文本如果大于最大显示行数,则在文本框能显示的最后一行加上“... 展开”,并与可显示的文本一起铺满整个文本框;在展开状态下,文本尾加上“ 折叠”。“展开”和“折叠”字体均为红色,且均可点击,点击后文本框变化到对应状态。
上代码(用ClickableSpan实现):
public class ExpandTextView extends AppCompatTextView {
private String originText = ""; //原始内容文本
private int initWidth = 0; //TextView可展示宽度
private int mMaxLines = 2; //TextView最大显示行数
private SpannableString SPAN_CLOSE = null; //收起的文本(颜色处理和点击监听)
private SpannableString SPAN_EXPAND = null; //展开的文本(颜色处理和点击监听)
private String TEXT_EXPAND = " 展开";
private String TEXT_CLOSE = " 收起";
private int SPAN_COLOR = R.color.red;
private boolean isClose = true;
private boolean isWidthModify = true; //用于控件宽高改变时通知重绘的判断,避免循环绘制
public ExpandTextView(Context context) {
super(context);
}
public ExpandTextView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ExpandTextView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
initWidth = getMeasuredWidth();
if(isWidthModify) {
notifyRefreshView();
isWidthModify = false;
}
}
/**
* 初始化"展开"的Span文本,即收起状态的文本尾
*/
private void initCloseEnd(){
Strin

本文介绍了如何在Android应用中创建一个可折叠展开的TextView。当文本超过最大显示行数时,最后一行会显示'...展开',点击后文本可全显并显示'折叠'选项。使用ClickableSpan进行实现,'展开'和'折叠'字样为红色,可点击切换状态。
最低0.47元/天 解锁文章
5965

被折叠的 条评论
为什么被折叠?



