【问题标题】:webview implementation using MvvmCross android native XAMARIN使用 MvvmCross android 原生 XAMARIN 的 webview 实现
【发布时间】:2023-02-01 21:04:14
【问题描述】:

我们正在为 Xamarin android native 使用 mvvmcross,但无法使用 webview 呈现 html 页面,如果有人尝试过,请提供帮助...常规的 xamarin android 可以做,但由于我们使用 mvvmcross,所以常规的将不起作用

我们尝试使用 mvvmcross XAMRIN 还添加了插件 https://nuget.info/packages/MvvmCross.Plugin.WebBrowser/8.0.2 但没有任何效果

【问题讨论】:

  • 它对我们不起作用,因为我们使用 MVVMCross 框架,谢谢
  • <android.webkit.WebView android:id="@+id/webView" local:MvxBind="TextFormatted TestHtml"/> 我们想要解决这个问题,我们应该能够为其设置动态内容
  • 好吧,你可以查看official doc about MVVMCROSS。但愿能帮到你。
  • 您是否发送了 MVVMcross 的文档链接,或者我们遗漏了什么?因为我们已经浏览了文档,所以没有找到任何东西

标签: android xamarin.android android-webview mvvmcross


【解决方案1】:

不一定是修复不工作的 WebView 的解决方案;但如果这确实是一个突出的兼容性问题,也许查看 MvvmsCross' WebBrowser 插件可能是适合您的应用程序的解决方法。

【讨论】:

  • 它会打开那个 URL,但在我们的例子中,我们必须渲染像 webview 这样的 html 内容,我们已经尝试过了,但没有成功
【解决方案2】:

这应该让你开始。我已经使用 MvvmCross 8.0.2 进行了测试。此代码稍作修改from Google

您也可以通过首先将 HTML 保存到文件然后使用“file://...”URI 来使用 MvvmCross Web 浏览器插件。

using Android.Content;
using Android.Runtime;
using Android.Util;
using Android.Webkit;
using System;

namespace MyApp.Droid.Ui.Controls
{
    [Register("myapp.droid.ui.controls.MvxWebView")]
    public class MvxWebView : WebView
    {
        private string _text;

        [Preserve(Conditional = true)]
        public MvxWebView(Context context, IAttributeSet attrs) : base(context, attrs)
        {
        }

        [Preserve(Conditional = true)]
        public string Text
        {
            get
            { 
                return _text;
            }
            set
            {
                if (string.IsNullOrEmpty(value))
                {
                    return;
                }

                _text = value;

                LoadData(_text, "text/html", "utf-8");
                UpdatedHtmlContent();
            }
        }

        public event EventHandler HtmlContentChanged;

        private void UpdatedHtmlContent()
        {
            HtmlContentChanged?.Invoke(this, EventArgs.Empty);
        }
    }
}

那么在你看来:

    <myapp.droid.ui.controls.MvxWebView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:MvxBind='Text MyHtml' />

...在您的 ViewModel 中:

public string MyHtml
{
    get => _myHtml;
    set => SetProperty(ref _myHtml, value);
}

MyHtml = "<html><p>Hello, World!</p></html>";

【讨论】:

    【解决方案3】:

    我从 View 需要它,因为下面的 LoadDataWithBaseURL() 函数在 ViewModel 中不受支持/不工作 我在视图中添加了以下代码。 WebView.LoadDataWithBaseURL(null, Html, "text/html", "utf-8", null); 在设计中

    它将使用 Table 加载 HTMl。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-25
      • 1970-01-01
      • 2015-06-30
      • 2016-04-24
      • 1970-01-01
      相关资源
      最近更新 更多