MvvmCross:Android自定义webview网址处理程序

时间:2013-05-20 15:50:45

标签: mvvm mvvmcross

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

2 个答案:

答案 0 :(得分:1)

  

是否有可用于WebView.SetBackgroundColor

的绑定

对于View颜色绑定,请参阅示例: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

答案 1 :(得分:0)

我通过继承和添加了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);
        }
    }
}