Android TextView html 添加了 url 不工作

Android TextView html added url not working

我正在 Java 中开发一个应用程序,targetSdkVersion 设置为 30。我有一个 activity,我需要在其中向用户显示一个可点击的 URL,形式为 点我 长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 link 设置电视内容时,它开箱即用。电视在 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: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)