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

带有可点击链接的Android TextView:如何捕获点击?

带有可点击链接的Android TextView:如何捕获点击?

温温酱 2019-10-15 15:53:41
我有一个呈现基本HTML的TextView,其中包含2个以上的链接。我需要捕获对链接的点击并打开链接-在我自己的内部WebView中(而不是在默认浏览器中)。处理链接呈现的最常见方法似乎是这样的:String str_links = "<a href='http://google.com'>Google</a><br /><a href='http://facebook.com'>Facebook</a>";text_view.setLinksClickable(true);text_view.setMovementMethod(LinkMovementMethod.getInstance());text_view.setText( Html.fromHtml( str_links ) );但是,这将导致链接在默认的内部Web浏览器中打开(显示“使用...完成操作”对话框)。我尝试实现一个onClickListener,当单击链接时会正确触发它,但我不知道如何确定单击了哪个链接...text_view.setOnClickListener(new OnClickListener(){    public void onClick(View v) {        // what now...?    }});另外,我尝试创建一个自定义LinkMovementMethod类并实现onTouchEvent ...public boolean onTouchEvent(TextView widget, Spannable text, MotionEvent event) {    String url = text.toString();    // this doesn't work because the text is not necessarily a URL, or even a single link...     // eg, I don't know how to extract the clicked link from the greater paragraph of text    return false;}有想法吗?解决方案示例我想出了一种解决方案,可以解析HTML字符串中的链接并使它们可单击,然后让您响应URL。
查看完整描述

3 回答

?
喵喵时光机

TA贡献1846条经验 获得超7个赞

根据另一个答案,这是一个函数setTextViewHTML(),该函数将从HTML字符串中解析出链接,并使它们可单击,然后让您响应URL。


protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)

{

    int start = strBuilder.getSpanStart(span);

    int end = strBuilder.getSpanEnd(span);

    int flags = strBuilder.getSpanFlags(span);

    ClickableSpan clickable = new ClickableSpan() {

        public void onClick(View view) {

            // Do something with span.getURL() to handle the link click...

        }

    };

    strBuilder.setSpan(clickable, start, end, flags);

    strBuilder.removeSpan(span);

}


protected void setTextViewHTML(TextView text, String html)

{

    CharSequence sequence = Html.fromHtml(html);

    SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);

    URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);   

    for(URLSpan span : urls) {

        makeLinkClickable(strBuilder, span);

    }

    text.setText(strBuilder);

    text.setMovementMethod(LinkMovementMethod.getInstance());       

}


查看完整回答
反对 回复 2019-10-15
?
有只小跳蛙

TA贡献1824条经验 获得超8个赞

您已完成以下操作:


text_view.setMovementMethod(LinkMovementMethod.getInstance());

text_view.setText( Html.fromHtml( str_links ) );

您是否尝试了如下所示的相反顺序?


text_view.setText( Html.fromHtml( str_links ) );

text_view.setMovementMethod(LinkMovementMethod.getInstance());

没有:


text_view.setLinksClickable(true);


查看完整回答
反对 回复 2019-10-15
  • 3 回答
  • 0 关注
  • 791 浏览

添加回答

举报

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