我从 API 中获取一些文本,其中包含嵌入字符串响应中的超链接。例如:
This text is coming from an API. Click http://www.example.com to visit us.
文本可以在此传入文本中的任何位置包含一个或多个超链接。例如,另一个 API 调用可以返回如下内容:
Call from http://www.example.com. Please visit us at http://www.test.org to see the possibilities.
我将其显示在
Label
内。在这种情况下是否可以使链接可点击并在 WebView 中打开相应的链接?
如果不是
label
那么可以使用 span
来解析和构造带有 GestureRecognizers
的传入文本吗?
在这种情况下是否可以使链接可点击并打开 WebView 中的相应链接?
是的,你可以参考官方文档:创建可复用的超链接类
在项目的根目录中创建一个
HyperlinkSpan
类:
public class HyperlinkSpan : Span
{
public static readonly BindableProperty UrlProperty =
BindableProperty.Create(nameof(Url), typeof(string), typeof(HyperlinkSpan), null);
public string Url
{
get { return (string)GetValue(UrlProperty); }
set { SetValue(UrlProperty, value); }
}
public HyperlinkSpan()
{
TextDecorations = TextDecorations.Underline;
TextColor = Colors.Blue;
GestureRecognizers.Add(new TapGestureRecognizer
{
// Launcher.OpenAsync is provided by Essentials.
Command = new Command(async () => await Launcher.OpenAsync(Url))
});
}
}
将其添加到 MainPage.xaml:
<ContentPage ...
xmlns:local="clr-namespace:MauiApp4"
x:Class="MauiApp4.MainPage">
<StackLayout>
...
<Label>
<Label.FormattedText>
<FormattedString>
<Span Text="Alternatively, click " />
<local:HyperlinkSpan Text="here"
Url="https://learn.microsoft.com/dotnet/" />
<Span Text=" to view .NET documentation." />
</FormattedString>
</Label.FormattedText>
</Label>
</StackLayout>
</ContentPage>
这是效果。