如果我有一个字符串:
String textWithUrl = "I am a string and http://www.google.com is the url to google";
然后我把它放在HTML元素中:
HTML html = new HTML(textWithUrl);
但该链接无法点击。通常我会点击它(从未使用Label
进行测试):
private String makeUrlInTextClickable(String text) {
if (text == null) return "";
String[] words = text.split(" ");
String textWithUrl = text;
for (String word : words) {
// Maybe more checks are needed to prevent typos like abcdhttp://
// Mostly the texts come from a source, in which the urls are likely to be valid
if (word.toLowerCase().contains("http://")) textWithUrl = textWithUrl.replace(word, "<a target=\"_blank\" href=\"" + word + "\">" + word + "</a>");
}
return textWithUrl;
}
textWithUrl
可以是任意长度,里面有很多网址。
有更好的方法吗?
使用示例:
public class Test implements EntryPoint {
@Override
public void onModuleLoad() {
String textWithUrl = "I am a string and http://www.google.com is the url to google";
RootPanel.get().add(new HTML(makeUrlInTextClickable(textWithUrl)), 0, 0);
}
}
然后输出只是一个带有可点击的谷歌网址的HTML小部件
答案 0 :(得分:1)
传统&#34;链接&#34;你可能想到的风格是一个锚。它将是蓝色(或浏览器链接颜色)并加下划线。点击处理程序将触发您提供的网址。
Anchor link = new Anchor("www.linktositehere.com");
只要使用标签实现它,您只需创建一个标签并为其添加自定义单击处理程序。在你的uibinder(或java代码)中,你可以将标签的样式看起来像你喜欢的任何东西。
Label labelLink = new Label("www.linktositehere.com");
labelLink.addClickHandler(new ClickHandler()
{
@Override
public void onClick(ClickEvent event)
{
Window.Location.assign("www.linktositehere.com");
}
});
答案 1 :(得分:1)
这不是特定于GWT的,但是有很多JavaScript库可以满足您的需求。你可以简单地从GWT中包含并调用JS,这应该是一个可行的解决方案。
这里有一个关于这个主题的答案:
How to replace plain URLs with links?
但为了完整性,这些是推荐的库:
两者都有一个实时演示功能,您可以自己测试它。显然,它们都不会覆盖你的边缘情况,但它仍然值得一看。
答案 2 :(得分:0)
如果您想显示链接,则必须使用锚标记。
如果您想使用HTML小部件,则有两个选项:
HTML
窗口小部件,就像您在代码中所做的那样。HTML
小部件中的wrap()方法将其包装在WHERE
窗口小部件下。希望这有帮助。
答案 3 :(得分:0)
我通常使用以下两种解决方案之一:
1)如果应用程序中发生了某些事情,我在Anchor上设置了一个ClickHandler:
Anchor link = new Anchor("text");
link.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent clickEvent) {
...
}
});
2)对于打开新浏览器窗口的外部链接,我通常只使用以下HTML:
HTML link = new HTML("<a href=\"" + link + "/\" target=\"_blank\">" + text + "</a>");