TextView的富文本带来了很多便利,但也带了不少坑,本篇主要解决设置了ClickableSpan、OnClickListener、OnLongClickListener带来的问题。
我们先来看ClickableSpan、OnClickListener的坑,我们会发现,我们点击的是Span部分,ClickableSpan的onClick会被执行,但OnClickListener也会执行onClick方法,是不是很刺激啊,其实最好的办法是在ClickableSpan的onClick被执行时,不要执行OnClickListener 的onClick方法就行了(哈哈,那不是废话吗)
所以,我们自定义OnTouchListener监听TextView的事件,来拦截Touch自行处理行为:
public class CustomTextViewTouchListener implements View.OnTouchListener {
private View.OnClickListener mOnClickListener;
public CustomTextViewTouchListener(View.OnClickListener onClickListener) {
mOnClickListener = onClickListener;
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
TextView tv = (TextView) v;
CharSequence text = tv.getText();
if (action == MotionEvent.ACTION_UP) {
if (text instanceof Spanned) {
int x = (int) event.getX();
int y = (int) event.getY();

本文介绍了一种解决TextView中ClickableSpan与OnClickListener同时响应点击事件的方法,并实现了对长按事件的支持。

334

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



