我有一些使用 Linkify 的 TextView。我希望链接不能长时间点击。在 TextViews 上使用 setLongClickable(false) 对 Linkify 链接没有任何影响。有什么办法可以让这些链接不能长时间点击?
问问题
2596 次
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_UP
并setOnTouchListener
在您TextView
的侦听中设置ACTION_DOWN
。然后只需将这些事件直接路由到MovementMethod
.
这样,您将只能获得链接的点击,同时在所有其他情况下(背景 onClick 动画、在其他 textview 区域中可点击等)保持文本行为正确。
textView.setMovementMethod(null)
是的,安装监听器时别忘了打电话。
于 2017-03-08T16:09:16.507 回答