我正在聊天,我正在使用Linkify解析链接和onLongClick打开一个对话框,允许用户复制邮件内容。
chatText是我的TextView。
chatText.setText(message);
Linkify.addLinks(chatText, Linkify.ALL);
chatText.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
final CharSequence[] items = {
"Copy"
};
AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("Select Action");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
copyToClipboard();
}
});
AlertDialog alert = builder.create();
alert.show();
return true;
}
});
对于普通邮件,它工作正常,问题是当我长按一下linkifyed消息时,它会打开对话框然后紧跟链接。 (例如打开浏览器) 当我回到应用程序时,表单仍然存在,并且复制到剪贴板的工作正常。
return true;
如果我没弄错的话,应该阻止onClick。 我无法弄清楚如何阻止onClick我正在长时间点击。
答案 0 :(得分:2)
这是我为这个案例写的一个小课:
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());
答案 1 :(得分:1)
如果有人遇到同样的问题,我发现这是一个已知的Android问题。 必须使用
android:descendantFocusability="blocksDescendants"
为了避免链接的textview阻止其他事件。
此处报告了问题