0

Linkifyを使用するTextViewがいくつかあります。リンクをロングクリックできないようにしたいと思います。TextViewsでsetLongClickable(false)を使用しても、Linkifyリンクには影響しません。これらのリンクをロングクリックできないようにする方法はありますか?

4

5 に答える 5

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 に答える
4

結局のところ、解決策は非常に単純でした。

textview.setOnLongClickListener(new OnLongClickListener(){
    public boolean onLongClick(View v) {
        return true;
    }
});
于 2012-02-13T22:36:16.733 に答える
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_UP設定setOnTouchListenerします。次に、これらのイベントをに直接ルーティングします。TextViewACTION_DOWNMovementMethod

このようにして、他のすべての場合(背景のonClickアニメーション、他のテキストビュー領域でクリック可能など)でテキストの動作を正しくしながら、リンクのクリックのみを取得できます。

textView.setMovementMethod(null)ええ、リスナーをインストールするときに呼び出すことを忘れないでください。

于 2017-03-08T16:09:16.507 に答える