【发布时间】:2020-08-03 09:54:24
【问题描述】:
我正在尝试使 xaml 标签内的 HTML 超链接可点击。我创建了从 API 获取包含 HTML 的字符串的类,并在 Android 和 iOS 的自定义标签渲染器中将其正确渲染为 HTML。为了更好地理解我的困境,有必要解释一下我的使用范围。
在我的应用程序中,我有一个消息传递组件,它仅使用 API 从网站发布和获取对话,该网站主要用于更好地帮助我们的用户,因为我们的办公室因冠状病毒而关闭。网站上的消息中心允许复杂的文本格式,如网络论坛帖子可能,如粗体、斜体、超链接等。
为了在移动设备上正确显示此内容,我必须创建一个自定义标签渲染器,它将获取带有 HTML 标记的字符串并将其正确显示为消息正文。这是一项非常简单的任务。
问题在于消息有时可能包含超链接,这些超链接当前显示为正确的链接,但是当用户尝试单击链接时,列表项是记录点击的内容,而不是标签,也不是 html 链接标签。
预期结果是,当用户单击列表中标签内的超链接时,它将在设备默认浏览器中打开该超链接。
我了解一种解决方案可能是解析任何链接的消息正文,创建链接列表,然后将跨度动态添加到每个标签都有自己的手势识别器,但这不可能对我来说,因为超链接有时会在对话中途出现。消息正文的示例可能是:
'您好用户,请到this link登录您的帐户。'
我知道创建消息传递应用程序有比这更好的方法,但移动端的主要目的是让用户更轻松地访问员工的回复,以及对员工消息的简单聊天回复。工作人员将专门使用该站点来回应用户,并可能利用复杂的编辑器来更好地帮助用户。
谢谢。 编辑:
在上面的例子中,最后的链接是不可点击的。当我单击链接时,整个列表视图项会突出显示,就好像该 ui 元素的优先级高于其中的标签一样。
相关代码:
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<Frame
Margin="5"
Padding="0"
BorderColor="LightGray"
CornerRadius="15"
HasShadow="False">
<StackLayout HorizontalOptions="FillAndExpand" VerticalOptions="FillAndExpand">
<StackLayout
Padding="5"
BackgroundColor="#f5f5f5"
Orientation="Horizontal">
<Label
Margin="5,2.5,5,2.5"
BackgroundColor="Transparent"
FontAttributes="Bold"
FontSize="Small"
HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="Start"
Text="{Binding SentBy}"
TextColor="Black"
VerticalOptions="FillAndExpand" />
<Label
Margin="5,2.5,5,2.5"
BackgroundColor="Transparent"
FontAttributes="Bold"
FontSize="Small"
HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="End"
Text="{Binding Sent}"
TextColor="Black"
VerticalOptions="FillAndExpand" />
</StackLayout>
<StackLayout Padding="5" Orientation="Horizontal">
<Label
Margin="2.5"
BackgroundColor="Transparent"
FontSize="Small"
HorizontalOptions="FillAndExpand"
HorizontalTextAlignment="Start"
Text="{Binding Body}"
TextColor="Black"
TextType="Html"
VerticalOptions="FillAndExpand" />
</StackLayout>
</StackLayout>
</Frame>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
【问题讨论】:
-
您的问题是什么?您发布了八段解释,但我没有看到一个问题。也没有发布代码。如果您需要帮助调试代码,您必须向我们展示该代码。
-
此外,Label 现在原生支持 HTML,您不必创建自定义渲染器
-
如何使标签内、列表内的超链接可点击。我将添加图片来说明我的意思。
-
在字符串中查找链接是一个众所周知的问题,有很多解决方案。
标签: c# html xamarin.forms cross-platform