2

我想在我的 Xamarin.Forms 应用程序中启用 HTML5 本地存储。当我部署到 Android 设备时,我可以看到网页出错,因为本地存储未启用。

本地存储可以按如下方式启用:

    webview = (WebView) findViewById(R.id.webview); 
    WebSettings settings = webview.getSettings(); 
    settings.setDomStorageEnabled(true);

当我只能访问 Xamarin.Forms Web 视图 (Xamarin.Forms.WebView) 时,如何/在哪里可以访问 Android Web 视图 (Android.WebKit.Webview) 的这些平台特定设置。

更一般地说,是否有可能在 Xamarin.Forms 中编写特定于平台的代码,或者 Xamarin.Forms 对于除了最基本的应用程序之外的所有应用程序都过于有限?

4

2 回答 2

5

是的,在使用 Xamarin.Forms 时可以编写特定于平台的代码,这正是 Paul 所说的渲染器可扩展性的功能。

在 Forms PCL 上创建自定义 WebView

public class CustomWebView : WebView { }

在您的 Android 项目上创建您的自定义 WebCiewRenderer

public class CustomWebViewRenderer : global::Xamarin.Forms.Platform.Android.WebViewRenderer
{
    protected override void OnElementChanged (Xamarin.Forms.Platform.Android.ElementChangedEventArgs<Xamarin.Forms.WebView> e)
    {
        base.OnElementChanged (e);

        if (Control != null) {
            Control.Settings.DomStorageEnabled = true;
        }
    }
}

不要忘记导出渲染器

[assembly: ExportRenderer (typeof (CustomWebView), typeof(CustomWebViewRenderer))]
于 2015-12-03T01:15:57.977 回答
0

您可以在需要时使用自定义渲染器编写特定于平台的代码。通过点击该链接,您将看到如何为每个平台自定义控件的不同示例。在您的情况下,您将继承 WebViewRenderer 以提供特定于 Android 的行为。

于 2015-12-02T17:07:23.667 回答