我试图在 android AlertDialog 中显示一些文本和一些单词,以便可单击打开网页。我做错了,因为它没有打开我告诉他的链接,并且孔文本是可点击的,我试图避免这种情况......这是我的代码:
final SpannableString s = new SpannableString(
Html.fromHtml("<br><a href=\"http://google.com\">a new link</a>")
);
final TextView tx1 = new TextView(this);
tx1.setText(getString(R.string.librarytextpart1)
+ s
+ getString(R.string.librarytextpart2));
tx1.setAutoLinkMask(RESULT_OK);
tx1.setMovementMethod(LinkMovementMethod.getInstance());
Linkify.addLinks(s, Linkify.ALL);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.library))
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
}
})
.setView(tx1).show();
Run Code Online (Sandbox Code Playgroud)
当单击对话框中的 SpannableString 文本时,它显示整个文本都是可单击的......并且仍然无法打开网页。当然,我不明白文档中的某些内容,但不明白是什么。你能帮忙吗?
使用 Html.fromHtml(),您可以从给定的字符串接收已格式化的 HTML 文本。
应用于您的情况,这将导致“新链接” - 但警报对话框会忽略下面的“href”,因为它不显示 HTML。因此链接器对您的代码不执行任何操作。尝试将其注释掉 - 行为将保持不变。
使用链接器,您可以将任意文本模式(正则表达式)转换为可单击的链接。例如,您可以将与正则表达式匹配的字符串附加到预定义的“基本”内容 URI。因此它不仅适用于网站,也适用于 Android 上使用的每个内容 URI。有关更多信息,请参阅Google DevSite。
您可以使用没有正则表达式的链接器,其中包含一些标准模式。这些是匹配的电子邮件地址、电话号码、地图坐标或网站。因此,为了使您的解决方案发挥作用:
它会起作用的。
我调整了您的代码,现在在 AlertWindow 中,URL“www.google.com”应该是可点击的:
final SpannableString s = new SpannableString("www.google.com");
final TextView tx1 = new TextView(this);
tx1.setText(getString(R.string.librarytextpart1)
+ s
+ getString(R.string.librarytextpart2));
tx1.setAutoLinkMask(RESULT_OK);
tx1.setMovementMethod(LinkMovementMethod.getInstance());
Linkify.addLinks(s, Linkify.WEB_URLS);
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(getString(R.string.library))
.setCancelable(false)
.setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int id) {
}
})
.setView(tx1).show();
Run Code Online (Sandbox Code Playgroud)