Xamarin.forms Listview中的HTML
我需要显示来自wordpress的帖子标题列表。标题中包含unicode字符。像这样"代码"&"8220,;我不会忘记”代码>我希望它显示“我不会忘记” 在代码隐藏中Xamarin.forms Listview中的HTML,xamarin.forms,Xamarin.forms,我需要显示来自wordpress的帖子标题列表。标题中包含unicode字符。像这样"代码"&"8220,;我不会忘记”我希望它显示“我不会忘记” 在代码隐藏中System.Net.WebUtility.HtmlDecode(text.Title.Rendered)将处理它。我能在XAMAL里做吗 <ListView x:Name="postList" ItemSelected="Handle_ItemSelected"> <ListView.Item
System.Net.WebUtility.HtmlDecode(text.Title.Rendered)
将处理它。我能在XAMAL里做吗
<ListView x:Name="postList" ItemSelected="Handle_ItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label FormattedText="{Binding Title.Rendered}"/>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
基于@Jason所说的代码:使用转换器 创建一个名为HtmlConverter的类:
using System;
using Xamarin.Forms;
namespace StackoverflowQ.Converters
{
public class HtmlConverter : IValueConverter
{
#region Converter
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if (value != null)
{
string text = (string)value;
return System.Net.WebUtility.HtmlDecode(text);
}
else
{
return "";
}
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
}
在您的xaml引用中,该类(我的类位于名为转换器的文件夹中)
然后将它添加到您的资源字典中,从那里您应该可以引用它
<?xml version="1.0" encoding="utf-8"?>
<ContentPage
xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="StackoverflowQ.Views.MainPage"
Title="{Binding Title}">
<ContentPage.Resources>
<ResourceDictionary>
<converters:HtmlConverter x:Key="HtmlConverter" />
</ResourceDictionary>
</ContentPage.Resources>
<StackLayout HorizontalOptions="CenterAndExpand" VerticalOptions="CenterAndExpand">
<ListView x:Name="postList" ItemSelected="Handle_ItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Label Text="{Binding Title.Rendered , Converter={StaticResource HtmlConverter}}" />
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage>
您可以创建一个标签渲染器来转换HTML文本,如下所示:
自定义标签:
public class CustomLabel: Label
{
}
Android渲染器:
[assembly: ExportRenderer(typeof(CustomLabel), typeof(HtmlFormattedLabelRenderer))]
namespace XYZ.Droid.Renderer
{
public class HtmlFormattedLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
var view = (CustomLabel)Element;
if (view == null) return;
if(!string.IsNullOrEmpty(Control.Text))
Control.SetText(Html.FromHtml(view.Text.ToString()), TextView.BufferType.Spannable);
}
}
}
[assembly: ExportRenderer(typeof(CustomLabel), typeof(HtmlFormattedLabelRendereriOS))]
namespace XYZ.iOS.Renderer
{
public class HtmlFormattedLabelRendereriOS:LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
var view = (CustomLabel)Element;
if (view == null) return;
var attr = new NSAttributedStringDocumentAttributes();
var nsError = new NSError();
attr.DocumentType = NSDocumentType.HTML;
Control.AttributedText = new NSAttributedString(view.Text, attr, ref nsError);
var mutable = Control.AttributedText as NSMutableAttributedString;
UIStringAttributes uiString = new UIStringAttributes();
uiString.Font = UIFont.FromName("Roboto-Regular",15f);
uiString.ForegroundColor = UIColor.FromRGB(130, 130, 130);
mutable.SetAttributes(uiString, new NSRange(0, Control.Text.Length));
}
}
}
[程序集:ExportRenderer(typeof(CustomLabel)、typeof(HtmlFormattedLabelRenderer))]
命名空间XYZ.Droid.Renderer
{
公共类HtmlFormattedLabelRenderer:LabelRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
var视图=(CustomLabel)元素;
if(view==null)返回;
如果(!string.IsNullOrEmpty(Control.Text))
Control.SetText(Html.FromHtml(view.Text.ToString()),TextView.BufferType.Spannable);
}
}
}
iOS渲染器:
[assembly: ExportRenderer(typeof(CustomLabel), typeof(HtmlFormattedLabelRenderer))]
namespace XYZ.Droid.Renderer
{
public class HtmlFormattedLabelRenderer : LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
var view = (CustomLabel)Element;
if (view == null) return;
if(!string.IsNullOrEmpty(Control.Text))
Control.SetText(Html.FromHtml(view.Text.ToString()), TextView.BufferType.Spannable);
}
}
}
[assembly: ExportRenderer(typeof(CustomLabel), typeof(HtmlFormattedLabelRendereriOS))]
namespace XYZ.iOS.Renderer
{
public class HtmlFormattedLabelRendereriOS:LabelRenderer
{
protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
{
base.OnElementChanged(e);
var view = (CustomLabel)Element;
if (view == null) return;
var attr = new NSAttributedStringDocumentAttributes();
var nsError = new NSError();
attr.DocumentType = NSDocumentType.HTML;
Control.AttributedText = new NSAttributedString(view.Text, attr, ref nsError);
var mutable = Control.AttributedText as NSMutableAttributedString;
UIStringAttributes uiString = new UIStringAttributes();
uiString.Font = UIFont.FromName("Roboto-Regular",15f);
uiString.ForegroundColor = UIColor.FromRGB(130, 130, 130);
mutable.SetAttributes(uiString, new NSRange(0, Control.Text.Length));
}
}
}
[程序集:ExportRenderer(typeof(CustomLabel)、typeof(HtmlFormattedLabelRendereriOS))]
命名空间XYZ.iOS.Renderer
{
公共类HtmlFormattedLabelRenderIOS:LabelRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
var视图=(CustomLabel)元素;
if(view==null)返回;
var attr=新的NSAttributed StringDocumentAttribute();
var nsError=新的nsError();
attr.DocumentType=NSDocumentType.HTML;
Control.AttributedText=新的NSAttributedString(view.Text、attr、ref-nsError);
var mutable=Control.attributeText作为NSMutableAttributeString;
UIStringAttributes uiString=新的UIStringAttributes();
uiString.Font=UIFont.FromName(“Roboto常规”,15f);
uiString.ForegroundColor=UIColor.FromRGB(130130130);
SetAttributes(uiString,新的NSRange(0,Control.Text.Length));
}
}
}
希望这可以解决您的问题。Forms9Patch.Label的HtmlText属性解码转义。Forms9Patch是一个免费的开源(MIT许可)NuGet软件包。完全披露:我是Forms9Patch的作者。使用值转换器谢谢你@LeRoy!这太完美了。我以前使用过转换器来计算UI组件的大小,但从未想过使用转换器来计算UI组件的大小。