【问题标题】:MvvmCross: Android custom webview urls handlersMvvmCross:Android 自定义 webview urls 处理程序
【发布时间】:2013-05-21 16:02:19
【问题描述】:

我的 Android 应用程序有一些复杂的文本,其中嵌入了超链接。我处理这个问题的最简单方法是使用嵌入式 WebView 并检测超链接点击以执行自定义命令。我正在尝试以 MvvmCross 的方式做到这一点。是否有可用于 WebView.SetBackgroundColor 或 WebView.LoadData 的绑定?一旦我得到我的自定义 html 并且用户点击超链接,我就使用 WebView.SetWebViewClient 安装我自己的客户端,它可以检测超链接点击并执行自定义操作。有什么方法可以将所有这些转换为正确的 MvxCommand 用法?

【问题讨论】:

    标签: mvvm mvvmcross


    【解决方案1】:

    是否有可用于 WebView.SetBackgroundColor 的绑定

    要查看颜色绑定,请参阅示例:https://github.com/slodge/MvvmCross-Tutorials/tree/master/ValueConversion

    还是 WebView.LoadData?

    Dynamic Binding UIWebView in MVVMCross

    我使用 WebView.SetWebViewClient 安装了我自己的客户端,它可以检测超链接点击并执行自定义操作。有什么方法可以将所有这些转换为正确的 MvxCommand 用法?

    我不清楚你的问题是什么。也许先尝试编写一些代码,然后返回一些示例代码来解决问题——例如,返回一个关于特定ViewModel 的特定问题,以便其他人可以尝试在代码级别而不是在这个更一般的级别上回答。或许也可以尝试一次问一个问题并更详细地提问 - 如何提问 可能会帮助您获得更好的结果 - 请参阅 https://stackoverflow.com/questions/how-to-ask

    【讨论】:

      【解决方案2】:

      我通过继承和添加 Command 属性创建了一个自定义 WebView。然后我添加了一个自定义 WebViewClient 来检测某些 URL 并调用绑定的相应命令。这是实现此目的的好方法吗?

      public class AboutWebView : WebView
      {
          public IMvxCommand AboutCommand { get; set; }
          public IMvxCommand LicenseCommand { get; set; }
          public IMvxCommand PrivacyCommand { get; set; }
      
          public AboutWebView (Context ctx,IAttributeSet aset) : base(ctx,aset)
          {
              SetWebViewClient (new AboutWebViewClient(this));
          }
      
          private class AboutWebViewClient : WebViewClient
          {
              private AboutWebView _parent = null;
      
              public AboutWebViewClient(AboutWebView parent)
              {
                  _parent = parent;
              }
      
              public override bool ShouldOverrideUrlLoading (WebView view, string url)
              {
                  if (url.StartsWith ("about://"))
                      _parent.AboutCommand.Execute ();
                  else if (url.Equals (App.LICENSE_URL))
                      _parent.LicenseCommand.Execute ();
                  else
                      _parent.PrivacyCommand.Execute ();
                  return(true);
              }
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-07-27
        • 2017-12-18
        • 1970-01-01
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        • 2020-03-25
        相关资源
        最近更新 更多