我试图在一个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();
单击对话框中的SpannableString文本时,它会显示整个文本是可点击的...但仍然无法打开网页。我肯定不会从文档中理解一些东西,但是看不出来。你能帮忙吗?
答案 0 :(得分:3)
使用Html.fromHtml(),您可以从给定的String接收已格式化的HTML文本。
应用于您的情况,这将导致“新链接” - 但警报对话框忽略下面的“href”,因为它没有显示HTML。因此,链接器对您的代码不执行任何操作。尝试将其评论出来 - 行为将保持不变。
使用Linkifier,您可以将任意模式的文本(RegExes)转换为可点击的链接。例如,您可以将与正则表达式匹配的字符串附加到预定义的“基本”内容URI。因此,它不仅适用于网站,也适用于Android上使用的每个内容URI。有关更多信息,请参阅Google DevSite。
您可以使用没有正则表达式的链接器,包含一些标准模式。这些是匹配的电子邮件地址,电话号码,地图坐标或网站。因此,为了使您的解决方案有效:
它会起作用。
我调整了您的代码,现在在AlertWindow中,网址“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();