需要我们自定义一个父类 重写OnTouch 解决事件冲突
public class CustomLinkMovementMethod extends LinkMovementMethod {
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
boolean b = super.onTouchEvent(widget,buffer,event);
//解决点击事件冲突问题
if(!b && event.getAction() == MotionEvent.ACTION_UP){
ViewParent parent = widget.getParent();//处理widget的父控件点击事件
if (parent instanceof ViewGroup) {
return ((ViewGroup) parent).performClick();
}
}
return b;
}
public static CustomLinkMovementMethod getInstance() {
if (sInstance == null)
sInstance = new CustomLinkMovementMethod();
return sInstance;
}
private static CustomLinkMovementMethod sInstance;
}
下面写了两点 来解决点击冲突:
1.textView.setMovementMethod(CustomLinkMovementMethod.getInstance());
2. 重写ClickableSpan类 在其onClick事件中 再设置setMovementMethod
public class ClickAtUserSpan extends ClickableSpan {
private Context context;
private UserModel userModel;
private SpanAtUserCallBack spanClickCallBack;
private int color;
public ClickAtUserSpan(Context context, UserModel userModel, int color, SpanAtUserCallBack spanClickCallBack) {
this.context = context;
this.userModel = userModel;
this.spanClickCallBack = spanClickCallBack;
this.color = color;
}
@Override
public void onClick(View view) {
if (spanClickCallBack != null) {
((TextView) view).setMovementMethod(CustomLinkMovementMethod.getInstance());
spanClickCallBack.onClick(view, userModel);
}
}
@Override
public void updateDrawState(TextPaint ds) {
/** 给文字染色 **/
ds.setColor(color);
/** 去掉下划线 , 默认自带下划线 **/
ds.setUnderlineText(false);
}
}
解决Android TextView点击事件冲突
2786

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



