Linkifyを使用するTextViewがいくつかあります。リンクをロングクリックできないようにしたいと思います。TextViewsでsetLongClickable(false)を使用しても、Linkifyリンクには影響しません。これらのリンクをロングクリックできないようにする方法はありますか?
2596 次
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
します。次に、これらのイベントをに直接ルーティングします。TextView
ACTION_DOWN
MovementMethod
このようにして、他のすべての場合(背景のonClickアニメーション、他のテキストビュー領域でクリック可能など)でテキストの動作を正しくしながら、リンクのクリックのみを取得できます。
textView.setMovementMethod(null)
ええ、リスナーをインストールするときに呼び出すことを忘れないでください。
于 2017-03-08T16:09:16.507 に答える