android.widget.TextView中可以增加超链接的处理,在增加超链接处理后,加入此TextView是作为ListView中的item的原素出现,有可能会影响ListView本身的一些click事件,此问题的解决方案如下
设置android.widget.TextView的LinkMovementMethod,其中判断是否是处于链接区域,示例代码如下:
textView.setMovementMethod(new LinkMovementMethod(){
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer,
MotionEvent event) {
isTextClickAreaLink = false;
int action = event.getAction();
//点击开始的时候,判断用户点击区域是否是链接
if (action == MotionEvent.ACTION_UP){
int x = (int) event.getX();
int y = (int) event.getY();
x -= widget.getTotalPaddingLeft();
y -= widget.getTotalPaddingTop();
x += widget.getScrollX();
y += widget.getScrollY();
Layout layout = widget.getLayout();
int line = layout.getLineForVertical(y);
int off = layout.getOffsetForHorizontal(line, x);
ClickableSpan[] link = buffer.getSpans(off, off, ClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
isTextClickAreaLink = true;
}
}
}
super.onTouchEvent(widget, buffer, event);
return true;
}
});
设置成功后,在手工设置TextView的OnClickListener事件,示例代码:
textView.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View view) {
if(!isTextClickAreaLink){
listView.performItemClick(view);
}
}});