我想在裹着ClickableSpan文本,只有當他們被點擊時的點擊次數僅長點擊次數的說1秒。有沒有辦法做到這一點?如果沒有,捕獲雙擊也可以。在Android中 - 我如何註冊使用ClickableSpan
這將是巨大的,如果OnClick方法捕獲的,關於該點擊一些元數據的事件 - 那麼我可以說忽略,如果點擊的長度很短。
有什麼建議嗎?
謝謝,維克多
我想在裹着ClickableSpan文本,只有當他們被點擊時的點擊次數僅長點擊次數的說1秒。有沒有辦法做到這一點?如果沒有,捕獲雙擊也可以。在Android中 - 我如何註冊使用ClickableSpan
這將是巨大的,如果OnClick方法捕獲的,關於該點擊一些元數據的事件 - 那麼我可以說忽略,如果點擊的長度很短。
有什麼建議嗎?
謝謝,維克多
我想要做的一樣,出現在腦海的唯一方法就是自定義MovementMethod類取代LinkMovementMethod和ClickableSpan更換,增加了一個長單擊抽象方法。其實原因很簡單:
編輯:工程就像一個魅力。我做了一些愚蠢的錯誤,像從不同的Android版本下載LinkMovementMethod,而不是在setSpan()中使用新的ClickableSpan類,但沒有什麼嚴重的。
萬一有人需要它,我在同一個地方發現它this place
package leeon.mobile.BBSBrowser;
import android.text.Layout;
import android.text.Selection;
import android.text.Spannable;
import android.text.method.LinkMovementMethod;
import android.text.method.MovementMethod;
import android.view.MotionEvent;
import android.widget.TextView;
public class LongClickLinkMovementMethod extends LinkMovementMethod {
private Long lastClickTime = 0l;
private int lastX = 0;
private int lastY = 0;
@Override
public boolean onTouchEvent(TextView widget, Spannable buffer,
MotionEvent event) {
int action = event.getAction();
if (action == MotionEvent.ACTION_UP ||
action == MotionEvent.ACTION_DOWN) {
int x = (int) event.getX();
int y = (int) event.getY();
lastX = x;
lastY = y;
int deltaX = Math.abs(x-lastX);
int deltaY = Math.abs(y-lastY);
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);
LongClickableSpan[] link = buffer.getSpans(off, off, LongClickableSpan.class);
if (link.length != 0) {
if (action == MotionEvent.ACTION_UP) {
if (System.currentTimeMillis() - lastClickTime < 1000)
link[0].onClick(widget);
else if (deltaX < 10 && deltaY < 10)
link[0].onLongClick(widget);
} else if (action == MotionEvent.ACTION_DOWN) {
Selection.setSelection(buffer,
buffer.getSpanStart(link[0]),
buffer.getSpanEnd(link[0]));
lastClickTime = System.currentTimeMillis();
}
return true;
}
}
return super.onTouchEvent(widget, buffer, event);
}
public static MovementMethod getInstance() {
if (sInstance == null)
sInstance = new LongClickLinkMovementMethod();
return sInstance;
}
private static LongClickLinkMovementMethod sInstance;
}
[1]: http://java2s.com/Open-Source/Java/SSH/brick-leeon/leeon/mobile/BBSBrowser/LongClickLinkMovementMethod.java.htm
LongClickableSpan:
package leeon.mobile.BBSBrowser;
import android.text.style.ClickableSpan;
import android.view.View;
public abstract class LongClickableSpan extends ClickableSpan {
abstract public void onLongClick(View view);
}
在某些代碼,感謝這個例子。如果我的課程用於擴展ClickableSpan,那麼現在如何改變它以使用您的課程? – 2014-01-02 12:58:28
我已經添加longclickablespan,只需設置你的TextView到LongClickMovementMethod.getInstance的文本運動方法和替換您ClickableSpans爲LongClickableSpans,比現在有一個onLongClick方法!希望能幫助到你 ! – rupps 2014-01-15 00:14:07
只有在您鬆開觸摸後才能使用。如果你可以修改它,即使有一定的時間,例如1秒或2秒的觸地點,它會觸發事件將使這個答案更真棒。 – ashutiwari4 2015-09-11 07:47:38
老問題..但我不知道如果你仍然有解決這個代碼,並可能在這裏發表您的onTouchEvent .. – rupps 2013-12-06 22:30:54
請對的onTouchEvent – do01 2016-06-25 10:37:15