为了账号安全,请及时绑定邮箱和手机立即绑定

在我的android应用程序中处理文本视图链接单击

在我的android应用程序中处理文本视图链接单击

蓝山帝景 2019-06-20 16:56:30
在我的android应用程序中处理文本视图链接单击我目前正在TextView中呈现HTML输入,如下所示:tv.setText(Html.fromHtml("<a href='test'>test</a>"));所显示的HTML是通过外部资源提供给我的,所以我不能像我想的那样改变周围的事物,但是我当然可以对HTML做一些正则表达式的修改,比如将href值更改为其他的东西。我想要的是能够直接从应用程序中处理链接,而不是让链接打开浏览器窗口。这完全可以实现吗?我猜有可能将href-值的协议设置为“myApp:/”,然后注册一些可以让我的应用程序处理该协议的内容。如果这确实是最好的方法,我想知道是如何做到的,但我希望有一种更简单的方法,即“当在这个文本视图中单击链接时,我想引发一个事件,该事件接收链接的href值作为输入参数”
查看完整描述

3 回答

?
慕标琳琳

TA贡献1830条经验 获得超9个赞

如果文本视图中有多个链接。例如,TextView有“https://”和“tel no”,我们可以定制LinkMotion方法,并根据模式处理对单词的单击。附件是定制链接运动方法。

public class CustomLinkMovementMethod extends LinkMovementMethod{private static Context movementContext;
private static CustomLinkMovementMethod linkMovementMethod = new CustomLinkMovementMethod();
public boolean onTouchEvent(android.widget.TextView widget, android.text.Spannable buffer, android.view.MotionEvent event){
    int action = event.getAction();

    if (action == MotionEvent.ACTION_UP)
    {
        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)
        {
            String url = link[0].getURL();
            if (url.startsWith("https"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Link was clicked", Toast.LENGTH_LONG).show();
            } else if (url.startsWith("tel"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Tel was clicked", Toast.LENGTH_LONG).show();
            } else if (url.startsWith("mailto"))
            {
                Log.d("Link", url);
                Toast.makeText(movementContext, "Mail link was clicked", Toast.LENGTH_LONG).show();
            }
            return true;
        }
    }

    return super.onTouchEvent(widget, buffer, event);}public static android.text.method.MovementMethod getInstance(Context c){
    movementContext = c;
    return linkMovementMethod;}

应该以下列方式从文本视图中调用这一点:

textViewObject.setMovementMethod(CustomLinkMovementMethod.getInstance(context));


查看完整回答
反对 回复 2019-06-20
  • 3 回答
  • 0 关注
  • 585 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信