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)
我正在 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)