ListView中的textView中的Android web链接

时间:2017-09-18 16:45:08

标签: android listview hyperlink

我想在文本视图中创建一个链接。

我的链接看起来像这样:

我从array.xml获得的链接的文本

<item>Icons made by <a href="http://www.freepik.com" title="Freepik">Freepik</a></item>

我已经阅读了设置移动方法

textView.setMovementMethod(LinkMovementMethod.getInstance());

这没有影响

android:autoLink="web"

如果文字为http://www.freepik.com,则此方法有效,但如果我想将自定义文字作为链接,则无效。

        viewHolder.textView.setClickable(true);
    viewHolder.textView.setText(text);
    viewHolder.textView.setMovementMethod(LinkMovementMethod.getInstance());

这是我用来填充textView

的代码

我想在最后的文字中看起来像这样:

Freepik

制作的图标

1 个答案:

答案 0 :(得分:1)

我认为你不可能以这种方式完成你想要的东西。

我认为最简单的解决方案是在不同的列表项中分隔您的链接。请记住,您可以使用不同高度的不同TextView,例如

或者,您可以转到自定义视图方法。如果您创建自定义视图(例如MultiLinkView),则可以将此视图添加到ListView。 我建议使用此解决方案,因为此方法允许您向视图项添加强大的逻辑。

我不能给你完整的代码,因为它应该太长了,但我能以正确的方式把你带来。

自定义视图是一个真正的Java类,它扩展了一些Android视图类。因此,当您实例化CustomView时,您可以将所需的所有参数传递给其构造函数(引用,链接,数组等)。 https://docs.microsoft.com/en-us/windows/uwp/graphics/key-frame-and-easing-function-animations

我的想法是找到一种方法将您需要的所有参数传递到自定义视图,然后找到一种表示数据的方法,将它们映射到您的链接。

我认为你应该放弃html解决方案而转向ClickableSpan。 这是我在项目中使用的一段代码,可以单击我的字符串的一部分:

        String text = "Hello <b>click me!</b> to go to internet!";

        // create Spanned
        Spanned spanned = Html.fromHtml(text);
        // create SpannableString
        SpannableString spanString = new SpannableString(spanned);

        // set clickable part
        ClickableSpan clickablePart = new ClickableSpan() {
            @Override
            public void onClick(View textView) {
                if (connectionDetector.isConnectedToInternet()) {
                    // open browser or webview fragment
                }
            }

            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setUnderlineText(false);
                ds.setColor(Color.WHITE);
            }
        };

        int startClickMe = spanString.toString().indexOf(text);
        spanString.setSpan(clickablePart, startClickMe, text.length() + startClickMe, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

显然在onClick你应该找到一种方法来获得正确的链接,但是,正如我之前所说,在自定义视图中,你可以根据需要添加任意数量的变量。我相信你能找到解决方案。

如果有帮助请告诉我