// ((TextView) helper.getView(R.id.tv_contents)).setText(getClickableSpan(content, true, (TextView) helper.getView(R.id.tv_contents))); // ((TextView)helper.getView(R.id.tv_contents)).setMovementMethod(LinkMovementMethod.getInstance()); /** * content 文字内容 * isOpen 是展开|收缩 * *瞎瞎瞎写 **/ private SpannableString getClickableSpan(final String content,boolean isOpen, final TextView textView) { if(content.length()<40){ return new SpannableString(content); }else { View.OnClickListener openlistener = new View.OnClickListener() { @Override public void onClick(View v) { textView.setText(getClickableSpan(content, true, textView)); } }; View.OnClickListener shrinklistener = new View.OnClickListener() { @Override public void onClick(View v) { textView.setText(getClickableSpan(content, false, textView)); } }; String imageString = isOpen ? "[00OPEN00]" : "[00OPEN00]"; String openString = isOpen ? " 展开" : " 收缩"; String shrinkContent = content.substring(0, 35); Drawable drawable = getResources().getDrawable(R.mipmap.ic_spinner_resouces_arrow); drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight()); SpannableString spanableInfo = new SpannableString((isOpen ? shrinkContent : content )+ openString + imageString); int start = (isOpen ? shrinkContent : content).length(); int end = spanableInfo.length(); spanableInfo.setSpan(new Clickable(isOpen ? shrinklistener:openlistener), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spanableInfo.setSpan(new ForegroundColorSpan(Color.GRAY), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spanableInfo.setSpan(new NoUnderlineSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spanableInfo.setSpan(new ImageSpan(drawable, ImageSpan.ALIGN_BASELINE), start + openString.length(), end, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); return spanableInfo; } } //修改点击事件回调 class Clickable extends ClickableSpan implements View.OnClickListener { private final View.OnClickListener mListener; public Clickable(View.OnClickListener l){ mListener = l; } @Override public void onClick(View v){ mListener.onClick(v); } } //去下划线 public class NoUnderlineSpan extends UnderlineSpan { @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setUnderlineText(false); } }
android Textview 实现展开收缩功能+部分文字点击 (SpannableString)
最新推荐文章于 2022-04-16 08:00:00 发布