gpt4 book ai didi

android - 在 android 上禁用 setMovementMethod(LinkMovementMethod.getInstance())

转载 作者:行者123 更新时间:2023-12-04 13:02:07 25 4
gpt4 key购买 nike

我在我的 Android 应用程序中使用 setMovementMethod(LinkMovementMethod.getInstance()) 作为 EditText View 。EditText 中的链接工作正常,但在某些情况下,我需要以程序方式禁用此方法(因为在 longClick 菜单中启用复制项)。怎么做?我需要类似“removeMovementMethod()”的东西。

你能帮帮我吗?

谢谢!

最佳答案

遇到同样的问题后,请考虑一下,设置方法似乎有一定的顺序。

  1. 获取“ TextView ”
final TextView tv = new TextView(getContext());
  1. 设置所有必要的布局参数
tv.setLayoutParams(lp_tv);
  1. 设置Linkify 将文本中的所有链接标记为Link
tv.setAutoLinkMask(Linkify.ALL);
  1. 设置TextView的内容(在setAutoLinkMask之后)
tv.setText("MyText")
tv.setText(Html.fromHtml("<big>MyText</big>");
  1. 现在您可以附加 LinkMovementMethod。如果之前附加了该方法,它将调用默认行为并打开系统浏览器。我使用 TextViewLinkHandler 类作为个人行为来完成这项工作。标准行为是:
tv.setLinkMovementMethod(new LinkMovementMethod.getInstance());

如果用户单击链接,我会使用 TextViewLinkHandler 做一些其他的事情(例如打开一个单独的 Intent 来处理 URL)

 tv.setMovementMethod(new TextViewLinkHandler() {
// do my stuff ...
// if left blank, nothing will happen on click at the link, so leave it blank to do nothing
});

用上面提到的TextViewLinkHandler()

public abstract class TextViewLinkHandler extends LinkMovementMethod {

public boolean onTouchEvent(TextView widget, Spannable buffer, MotionEvent event) {
if (event.getAction() != MotionEvent.ACTION_UP)
return super.onTouchEvent(widget, buffer, event);

int x = (int) event.getX();
int y = (int) event.getY();

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);

URLSpan[] link = buffer.getSpans(off, off, URLSpan.class);
if (link.length != 0) {
onLinkClick(link[0].getURL());
}
return true;
}

abstract public void onLinkClick(String url);
}

关于android - 在 android 上禁用 setMovementMethod(LinkMovementMethod.getInstance()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10574005/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com