onLongClick 触发 Linkify onClick
onLongClick triggers Linkify onClick
我正在聊天,我正在使用 Linkify 解析 links 并使用 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;
}
});
对于普通消息,它工作正常,问题是当我长按 link 化消息时,它会打开对话框,然后立即跟随 link。 (例如打开浏览器)
当我回到应用程序时,表单仍然存在,并且复制到剪贴板工作正常。
return true;
如果我没记错的话,应该会阻止 onClick。
我不知道如何在我长按时阻止 onClick。
如果有人遇到同样的问题,我发现这是 Android 的一个已知问题。
必用
android:descendantFocusability="blocksDescendants"
为了避免linkifyed textview阻塞其他事件
这里报告了问题
这是我为这个案例写的 class:
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());
我正在聊天,我正在使用 Linkify 解析 links 并使用 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;
}
});
对于普通消息,它工作正常,问题是当我长按 link 化消息时,它会打开对话框,然后立即跟随 link。 (例如打开浏览器) 当我回到应用程序时,表单仍然存在,并且复制到剪贴板工作正常。
return true;
如果我没记错的话,应该会阻止 onClick。 我不知道如何在我长按时阻止 onClick。
如果有人遇到同样的问题,我发现这是 Android 的一个已知问题。 必用
android:descendantFocusability="blocksDescendants"
为了避免linkifyed textview阻塞其他事件
这里报告了问题
这是我为这个案例写的 class:
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());