【问题标题】:Android TextView html added url not workingAndroid TextView html添加的网址不起作用
【发布时间】:2022-01-07 00:36:04
【问题描述】:

我正在用 Java 开发一个应用程序,targetSdkVersion 设置为 30。我有一个活动,我需要向用户显示一个可点击的 URL,其形式为 click me,其中隐藏了长 URL支持 HTML。

我挣扎了一段时间。目前我的代码如下所示

            if (station.getSponsorUrl().length() > 32) {
                stationSponsorUrl.setClickable(true);
                stationSponsorUrl.setMovementMethod(LinkMovementMethod.getInstance());
                stationSponsorUrl.setText(Html.fromHtml("<a href=\"" + station.getSponsorUrl() +"\">" + getString(R.string.www_link) + "</a>\n", HtmlCompat.FROM_HTML_MODE_LEGACY));
            }
            else {
                stationSponsorUrl.setText(station.getSponsorUrl());
            }

当我删除对setMovementMethod 的调用时,URL 会正确呈现(字体颜色),但根本无法点击。当我让setMovementMethod 处于活动状态时,它甚至不会显示为 URL。我看到R.string.www_link 定义的文本格式不变。当然也不行。

else 案例工作正常,当我使用纯 HTML 链接设置电视内容时,它开箱即用。电视在 XML 布局中定义如下

                    <TextView
                        android:id="@+id/textViewSponsorUrl"
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:layout_marginTop="24dp"
                        android:autoLink="all"
                        android:fontFamily="@font/alegreya_sans_sc_medium"
                        android:linksClickable="true"
                        android:text="TextView"
                        android:textSize="18sp"
                        app:layout_constraintStart_toStartOf="parent"
                        app:layout_constraintTop_toTopOf="parent" />

【问题讨论】:

    标签: android html url textview


    【解决方案1】:

    您在布局中使用android:autoLink="all" 时遇到了麻烦。我建议您删除该自动链接行并按如下方式调整您的代码:

    stationSponsorUrl.setMovementMethod(LinkMovementMethod.getInstance());
    String anchorText;
    if (station.getSponsorUrl().length() > 32) {
        anchorText = getString(R.string.www_link)
    } else {
        anchorText = station.getSponsorUrl()
    }
    stationSponsorUrl.setMovementMethod(LinkMovementMethod.getInstance());
    stationSponsorUrl.setText(
        HtmlCompat.fromHtml(
            "<a href=\"" + station.getSponsorUrl() + "\">" + anchorText + "</a>\n", HtmlCompat.FROM_HTML_MODE_LEGACY
        )
    );
    

    您也可以使用 setAutoLinkMask() 关闭长 URL 的自动链接:

    stationSponsorUrl.setAutoLinkMask(0)
    

    【讨论】:

    • 谢谢 它可以正常工作。我只需要添加 `stationSponsorUrl.setAutoLinkMask(0);` 在您的代码 sn-p 和缩短的 URL 开始正常工作之前的一行。
    猜你喜欢
    • 1970-01-01
    • 2014-07-19
    • 2021-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-10
    • 1970-01-01
    相关资源
    最近更新 更多