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

标签 android android-edittext hyperlink

我在我的 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/

相关文章:

css - 超链接按钮

java - 使用replaceSelection方法在JEditorPane中可点击的HTML链接

android - 在 Android 10 中,当以编程方式打开位置时,我得到结果代码 RESULT_CANCELED

android - android中的延迟时间

android - 为低于 31 的 API 创建 LocationRequest

android - 禁用 EditText 但接收触摸/点击事件

android - 类未找到异常 : Didn't find class "android.support.design.R$styleable"

android - 如何使编辑文本既有符号又有十进制?

android - 如何在 Android UI 中绘制圆角矩形?

javascript - 在 Javascript 中添加指向 .textcontent 的链接