当前位置:  开发笔记 > 编程语言 > 正文

在启用自动链接的textview中控制onclicklistener

如何解决《在启用自动链接的textview中控制onclicklistener》经验,为你挑选了2个好方法。

我正在使用TextView,我autolink="web"在XML文件中设置了属性.我也onClickListener为这个TextView 实现了.问题是,当TextView中的文本包含超链接时,如果我触摸该链接,链接将在浏览器中打开,但同时onClickListener也会触发.我不希望这样.

我想要的是,如果我触摸超链接,clickListener不应该触发.如果我触摸没有超链接的文本部分,它应该只会触发.有什么建议吗?



1> binary..:

你可以使用Textview类的getSelectionStart()和getSelectionEnd()函数来解决这个问题,

tv.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        ClassroomLog.log(TAG, "Textview Click listener ");
        if (tv.getSelectionStart() == -1 && tv.getSelectionEnd() == -1) {
            //This condition will satisfy only when it is not an autolinked text
            //Fired only when you touch the part of the text that is not hyperlinked 
        }
    }
});

这可能是一个迟到的回复,但可能对那些正在寻找解决方案的人有用.


如果我点击文本外部以及textview中的链接,它仍会打开链接视图,我只希望在点击链接时发生.

2> Youngjae..:

其中一篇@CommonsWare帖子有助于拦截自动链接OnClick事件.

private void fixTextView(TextView tv) {
    SpannableString current = (SpannableString) tv.getText();
    URLSpan[] spans =
            current.getSpans(0, current.length(), URLSpan.class);

    for (URLSpan span : spans) {
        int start = current.getSpanStart(span);
        int end = current.getSpanEnd(span);

        current.removeSpan(span);
        current.setSpan(new DefensiveURLSpan(span.getURL()), start, end,
                0);
    }
}

public static class DefensiveURLSpan extends URLSpan {
    private String mUrl;

    public DefensiveURLSpan(String url) {
        super(url);
        mUrl = url;
    }

    @Override
    public void onClick(View widget) {
        // openInWebView(widget.getContext(), mUrl); // intercept click event and do something.
        // super.onClick(widget); // or it will do as it is.
    }
}

上面的代码应用如下.它将遍历所有可链接的文本,并将单击事件替换为上面的事件处理程序.

fixTextView(textViewContent);

推荐阅读
凹凸曼00威威_694
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有