Android TextView ClickableSpan 分段点击实现
2016-10-19 12:02
453 查看
最新项目遇到TextView分段点击的问题,类似新浪微博@多个人的点击效果,效果图如下:
具体主要通过CustomClickableSpan类来实现,CustomClickableSpan继承自ClickableSpan,在构造方法传入子串的开始位置。
Activity类:
public class ClickableSpanActivity extends AppCompatActivity {
}
CustomClickableSpan类:
public class CustomClickableSpan extends ClickableSpan {
}
具体主要通过CustomClickableSpan类来实现,CustomClickableSpan继承自ClickableSpan,在构造方法传入子串的开始位置。
Activity类:
public class ClickableSpanActivity extends AppCompatActivity {
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_clickable_span); TextView tvContent = (TextView) findViewById(R.id.TextView_Content); String content = "@阿里巴巴 @百度 @腾讯 真有钱!"; layoutContent(tvContent, content); } private void layoutContent(TextView textView, String content) { if (!content.contains("@")) { textView.setText(content); return; } SpannableStringBuilder builder = new SpannableStringBuilder(content); int index = 0; while (content.indexOf("@", index) != -1) { int atIndex = content.indexOf("@", index); //@的位置 int sIndex = content.indexOf(" ", atIndex); //空格的位置 index = sIndex; if (sIndex < atIndex) { //格式不符合 continue; } Log.d("ClickSpan", "@ = " + atIndex + " S = " + sIndex); CustomClickableSpan clickableSpan = new CustomClickableSpan(this, atIndex); builder.setSpan(clickableSpan, atIndex, sIndex, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); } textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setText(builder); }
}
CustomClickableSpan类:
public class CustomClickableSpan extends ClickableSpan {
private Context mContext; private int mAtIndex; public CustomClickableSpan(Context context, int atIndex) { mContext = context; mAtIndex = atIndex; } @Override public void onClick(View widget) { if (widget instanceof TextView) { TextView textView = (TextView) widget; Log.d("SpanContent", "Content = " + textView.getText().toString()); String str = textView.getText().toString(); int sIndex = str.indexOf(" ", mAtIndex); Toast.makeText(mContext, str.substring(mAtIndex + 1, sIndex), Toast.LENGTH_SHORT).show(); } } @Override public void updateDrawState(TextPaint ds) { super.updateDrawState(ds); ds.setColor(Color.BLUE); ds.setUnderlineText(false); ds.clearShadowLayer(); }
}
相关文章推荐
- Android学习—— TextView ClickableSpan 点击链接事件 改超链接颜色
- 浅谈ClickableSpan , 实现TextView文本某一部分文字的点击响应
- 利用Span实现TextView/EditText的灵活表现--改变字体外观,添加点击,超链接
- android listview item点击时更改textview的颜色 代码中实现
- Android:一个TextView分段改变样式、添加监听事件的实现方式(类似朋友圈评论)
- android开发游记:textview超过长度点击展开自动滚动(在一个TextView中实现,不增加布局复杂度)
- [Android] ImageButton | Button | TextView 点击和触摸效果实现
- Android TextView实现点击展开动画效果
- Android事件系统(2)ClickableSpan In Clickable TextView
- TextView ClickableSpan onClickListener点击事件冲突
- Android RichText 让Textview轻松的支持富文本(图像ImageSpan、点击效果等等类似QQ微信聊天)
- Android中实现为TextView添加多个可点击的文本
- android 实现textview部分文字点击效果,类似于微博的话题丶用户
- android Textview 实现展开收缩功能+部分文字点击 (SpannableString)
- ListView的Item里的TextView设置ClickableSpan和LinkMovementMethod导致ListView无法响应点击事件
- android中TextView实现多个可点击的文本
- Android中实现为TextView添加多个可点击的文本
- Android 自定义TextView 实现文字对齐排版且支持点击划词
- Android TextView中实现点击文本超链接(无下划线)的封装类