0

我有一些使用 Linkify 的 TextView。我希望链接不能长时间点击。在 TextViews 上使用 setLongClickable(false) 对 Linkify 链接没有任何影响。有什么办法可以让这些链接不能长时间点击?

4

5 回答 5

4

事实证明,解决方案非常简单:

textview.setOnLongClickListener(new OnLongClickListener(){
    public boolean onLongClick(View v) {
        return true;
    }
});
于 2012-02-13T22:36:16.733 回答
4

这将对您有所帮助

Spannable span = Spannable.Factory.getInstance().newSpannable("my span text"); 
             Linkify.addLinks(span, Linkify.ALL);
         URLSpan[] uspans = span.getSpans(0, mTextAdData.length(), URLSpan.class);

    int i = 0;
            for (URLSpan uspan : uspans) {
                int start = span.getSpanStart(uspan);
                int end = span.getSpanEnd(uspan);
                span.removeSpan(uspan);
                MyUrlSpan uspan1 = new MyUrlSpan(uspan.getURL());
                span.setSpan(uspan1, start, end, 0);
                if (i != start) {
                    // From i to start of this span set a custom span
                    span.setSpan(new MyUrlSpan(), i, start,
                            Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
                i = end;
            }

    public class MyUrlSpan extends URLSpan implements OnLongClickListener {
                public MyUrlSpan(String string) {
                    super(string);
                }

                       @Override
                       public void onClick(View v){
                       }

                       @Override
                public boolean onLongClick(View v) {
                    return false;
                }
        }
于 2012-02-13T09:39:53.557 回答
1

尝试这个...

    Link.setOnLongClickListener(new OnLongClickListener() {
        public boolean onLongClick(View v) {
            Link.setLongClickable(false);
            return false;
        }
    });

    Link.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {
            if (!Link.isLongClickable()) {
                Link.setLongClickable(true);
                return;
            }

            //  Link your page 
        }
    });
于 2012-02-13T09:59:02.533 回答
0

这是我为这个案例写的一个小课:

public class NoLongClickMovementMethod extends LinkMovementMethod {

long longClickDelay = ViewConfiguration.getLongPressTimeout();
long startTime;

private static NoLongClickMovementMethod linkMovementMethod = new NoLongClickMovementMethod();

@Override
public boolean onTouchEvent(android.widget.TextView widget, android.text.Spannable buffer, MotionEvent event) {
    int action = event.getAction();

    if (action == MotionEvent.ACTION_DOWN) {
        startTime = System.currentTimeMillis();
    }

    if (action == MotionEvent.ACTION_UP) {
        long currentTime = System.currentTimeMillis();
        if (currentTime - startTime >= longClickDelay)
            return true;
    }
    return super.onTouchEvent(widget, buffer, event);
}

public static android.text.method.MovementMethod getInstance() {
    return linkMovementMethod;
}

用法:textView.setMovementMethod(NoLongClickMovementMethod.getInstance());

于 2016-09-11T17:57:12.113 回答
0

如果您需要它仍然可以点击但不能长时间点击,请考虑重载活动的dispatchTouchEvent侦听ACTION_UPsetOnTouchListener在您TextView的侦听中设置ACTION_DOWN。然后只需将这些事件直接路由到MovementMethod.

这样,您将只能获得链接的点击,同时在所有其他情况下(背景 onClick 动画、在其他 textview 区域中可点击等)保持文本行为正确。

textView.setMovementMethod(null)是的,安装监听器时别忘了打电话。

于 2017-03-08T16:09:16.507 回答