有什么方法可以将 HTML 添加到 Xamarin.Forms 页面中吗?

2024-01-19

我希望能够将一些 HTML 添加到 Xamarin.Forms 页面中?这可能吗?是否可以将其添加为标签的一部分?


如果您想要完整的 html 支持,那么 Xamarin formsWebView将会是一个不错的选择。但如果你想要一些基本的格式支持Label因为它是本机对应部分(TextView在安卓中,以及UILabel在 iOS 中)这样做,您可以为此实现渲染器。

表格控制

public class HtmlLabel : Label
{
    public static readonly BindableProperty HtmlProperty =
        BindableProperty.Create(
            "Html", typeof(string), typeof(HtmlLabel),
            defaultValue: default(string));

    public string Html
    {
        get { return (string)GetValue(HtmlProperty); }
        set { SetValue(HtmlProperty, value); }
    }
}

iOS 渲染器

[assembly: ExportRenderer(typeof(HtmlLabel), typeof(HtmlLabelRenderer))]
namespace HtmlLabelApp.iOS
{
    public class HtmlLabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

            //if we have a new forms element, we want to update text with font style (as specified in forms-pcl) on native control
            if (e.NewElement != null)
                UpdateTextOnControl();
        }

        protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            //if there is change in text or font-style, trigger update to redraw control
            if (e.PropertyName == nameof(HtmlLabel.Html))
            {
                UpdateTextOnControl();
            }
        }

        void UpdateTextOnControl()
        {
            if (Control == null)
                return;

            if (Element is HtmlLabel formsElement)
            {
                //set new text with ui-style-attributes to native control (UILabel)
                var htmlString = new NSString(formsElement.Html ?? string.Empty);
                var htmlData = htmlString.Encode(NSStringEncoding.UTF8);
                var attr = new NSAttributedStringDocumentAttributes
                {
                    DocumentType = NSDocumentType.HTML
                };

                var error = new NSError();
                var dict = new NSDictionary();

                var attributedString = new NSAttributedString(htmlData, attr, out dict, ref error);
                Control.AttributedText = attributedString;
            }
        }
    }
}

安卓渲染器

[assembly: ExportRenderer(typeof(HtmlLabel), typeof(HtmlLabelRenderer))]
namespace HtmlLabelApp.Droid
{
    public class HtmlLabelRenderer : LabelRenderer
    {
        protected override void OnElementChanged(ElementChangedEventArgs<Label> e)
        {
            base.OnElementChanged(e);

            //if we have a new forms element, we want to update text with font style (as specified in forms-pcl) on native control
            if (e.NewElement != null)
                UpdateTextOnControl();
        }

        protected override void OnElementPropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e)
        {
            base.OnElementPropertyChanged(sender, e);

            //if there is change in text or font-style, trigger update to redraw control
            if (e.PropertyName == nameof(HtmlLabel.Html))
            {
                UpdateTextOnControl();
            }
        }

        void UpdateTextOnControl()
        {
            if (Control == null)
                return;

            if (Element is HtmlLabel formsElement)
            {
                var htmlAsString = formsElement.Html ?? string.Empty;      // used by WebView
                var htmlAsSpanned = Html.FromHtml(htmlAsString, FromHtmlOptions.ModeCompact); // used by TextView

                Control.TextFormatted = htmlAsSpanned;
            }
        }
    }
}

使用示例

<local:HtmlLabel BackgroundColor="Silver">
    <local:HtmlLabel.Html>
        <x:String>
        <![CDATA[

            <h1>Main Title</h1>
            <h2>A sub-title</h2>
            <p>This is some html. Look, here\'s an <u>underline</u>.</p>
            <p>Look, this is <em>emphasized.</em> And here\'s some <b>bold</b>.</p>
            <p>This is a UL list:
            <ul>
             <li>One</li>
             <li>Two</li>
             <li>Three</li>
            </ul>
            <p>This is an OL list:
            <ol>
             <li>One</li>
             <li>Two</li>
             <li>Three</li>
            </ol>
        ]]>
        </x:String>
    </local:HtmlLabel.Html>
</local:HtmlLabel>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有什么方法可以将 HTML 添加到 Xamarin.Forms 页面中吗? 的相关文章

  • 绑定到 ListView 项目从视图模型中点击的属性

    我正在尝试使用 itemtapped 属性将事件绑定到菜单页面上的 ListView 目前我在我的应用程序中使用 MVVM Xamarin 表单实验室 框架 我想要完成的是当用户点击菜单项时应用程序导航到正确的视图 这是xaml代码
  • 如何在 xamarin.forms 中隐藏列表视图的空行

    我有一个StackLayout with a ListView我有一个添加按钮 我想将其显示在ListView 但是ListView显示许多未使用的行 只是空行 这迫使我的按钮显示在页面底部 我一直在搞乱VerticalOptions一整天
  • 从 Xamarin Forms 的输入控件中删除下划线

    我是 Xamarin Forms 的新手 正在开发登录表单并使用 Material Design IVisual 我创建了一个自定义 Entry 类并继承它MaterialEntryRenderer来定制它 我想要实现的目标是删除下划线En
  • Xamarin Dim 页面(主详细信息页面)

    因此 对于 Android 当显示主从页面的母版页时 母版页会被 黑色暗淡 视图覆盖 因此很容易用眼睛区分这两个页面 在 iOS 中 详细信息页面不会变暗 因此更难区分视图 有没有办法用 黑色半透明 的 BoxView 或 Frame 覆盖
  • 更改 Xamarin 中 ListView 所选项目的背景颜色

    我在 Xamarin 中创建了一个主从类型项目 当我从主页中选择一个项目时 背景颜色默认为橙色 我怎样才能将其更改为我选择的颜色 此问题是 Android 特有的 在 Android 项目中将此行添加到 Resources values s
  • 如何在 Xamarin.Mac 中执行终端命令并读入其输出

    我们正在编写一个 Xamarin Mac 应用程序 我们需要执行像 uptime 这样的命令 并将其输出读取到应用程序中进行解析 这可以做到吗 在 Swift 和 Objective C 中都有 NTask 但我似乎无法在 C 中找到任何示
  • 构建成功时,Intellisense 不断显示错误 Visual Studio 2015

    因此 我正在开发一个 Xamarin 项目 突然 Visual studio 2015 开始崩溃 它几乎在所有内容下都显示错误红线 例如 InitializeComponent 在每个页面中都有红线 项目构建和运行没有错误 错误仅来自 In
  • NSTable行点击事件

    我正在开发 Xamarin Mac 应用程序 目前正在创建新闻源列表 我想要的是 当用户单击其中一行时 我会执行一些操作 打开浏览器并显示完整的故事 这是我的自定义单元格 行 的样子 public class CustomLatestNew
  • 在 Xamarin 中获取 OutOfMemoryException

    java lang OutOfMemoryError 考虑增加 JavaMaximumHeapSize Java 执行时内存不足 java exe 我的 Visualstudio Xamarin 项目出现内存不足异常 请帮助我如何解决此问题
  • Visual Studio:Xamarin - 启动 Android 模拟器时出错

    遇到的问题https dotnet microsoft com learn xamarin hello world tutorial devicesetup https dotnet microsoft com learn xamarin
  • 将 C# Xamarin.forms.image 转换为 CGImage

    我正在尝试将 Xamarin forms image 转换为 CoreGraphics CGImage void saveImg Xamarin Forms Image image CoreGraphics CGImage CGImage
  • Xamarin.Forms:Oxyplot 占据整个页面

    我已在 Xamarin Forms 中使用 oxyplot 成功生成了一个绘图 但我无法阻止 oxyplot 占据整个页面 我在轮播中的其他页面上使用 stacklayout 并在每个页面上有一个横幅作为嵌入的 stacklayout 并希
  • 谷歌地图url如何定义圆形标记?

    我想打开默认地图应用程序 但我想要一个圆形标记 而不是默认标记 这就是我所拥有的 case Device Android if string IsNullOrEmpty imovel Endereco Freguesia uri new U
  • 如何以编程方式检索 Visual Studio for Mac 的版本信息?

    我想在 Xamarin 应用程序的生成作业期间检索 Visual Studio for Mac 的版本信息 目标是将它们作为调试信息包含在二进制文件中 有没有办法以编程方式或使用 msbuild 的命令语句获取 Visual Studio
  • 保护 APK 中的字符串

    我正在使用 Xamarin 的 Mono for Android 开发一个 Android 应用程序 我目前正在努力使用 Google Play API 添加应用内购买功能 为此 我需要从我的应用程序内向 Google 发送公共许可证密钥
  • 如何请求用户开启定位服务

    我需要我的应用程序来访问用户的当前位置 它在应用程序开始时检查用户是否已设置 如果没有 我需要应用程序显示提示以使其使用位置服务 就像警报视图一样 点击按钮 它应该会带您进入 iPhone 上的位置服务屏幕 您可以通过以下代码检查 loca
  • 使用 Xamarin Forms 显示图像

    Solved 答案是更新所有 nuget 软件包并针对较新版本的 Android 现在图像按预期加载 我对此并不满意 因为我完全使用了 Xamarin 提供的代码 并且针对较新的版本已弃用了代码所依赖的一些项目 初始版本是 Xamarin
  • 在 Xamarin.Mac 应用程序包上运行 Instruments

    米格尔 德伊卡萨 https stackoverflow com users 16929 miguel de icaza博客上写了关于使用 Instruments 分析使用 Mono 构建的 Mac 应用程序 http tirania or
  • Mvvm跨本地化:运行时切换

    有没有办法在运行时将当前语言更改为另一种语言 例如 能够在单击按钮时或启动应用程序时进行切换 获取用户语言并进行切换 如何告诉插件在启动时检查用户语言 在此先感谢您的帮助 有没有办法在运行时将当前语言更改为另一种语言 是的 打电话build
  • Xamarin.Forms UWP 项目中标题栏和选项卡之间令人恼火的空白

    我几乎是新手Xamarin Forms我正在开发一个相当简单的跨平台应用程序 该应用程序在 Android 中显示得足够好 但在 UWP 中却出现了一个愚蠢的空白 该项目由一个 TabbedPage 组成 其中包含 4 个 Navigati

随机推荐