android - Xamarin Forms HybridWebview 始终在浏览器中打开

标签 android xamarin xamarin.forms android-webview

我已经实现了一个 HybridWebView,如下所述:https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/custom-renderer/hybridwebview/

现在,我在渲染器中硬编码了 url,如下所示:

Control.LoadUrl("http://www.google.com");

结果是 url 打开,但总是在新浏览器中,而不是像我期望的那样嵌入到我的 ContentPage 中。

我可以使用 Android.Webkit.WebView 上的设置属性来确定它的显示方式吗?

最佳答案

The result is the url opens, but always in a new browser, not embedded in my ContentPage as I would expect.

对于android平台,它使用Android.Webkit.WebView作为原生控件,你可以从代码中看到:

if (Control == null) {
    var webView = new Android.Webkit.WebView (Forms.Context);
    webView.Settings.JavaScriptEnabled = true;
    SetNativeControl (webView);
}

然后对于 Android.Webkit.WebView,如果您不启用该 Activity 来处理查看网页的 Intent ,它就是一个简单的网页查看器,还不完全是一个浏览器,因为一旦你点击一个链接,默认的 Android 浏览器就会处理它。要启用它,此代码可以在 WebView 初始化后的任何位置:webView.SetWebViewClient(new WebViewClient())。因此,您可以添加此代码,例如:

if (Control == null) {
    var webView = new Android.Webkit.WebView (Forms.Context);
    webView.SetWebViewClient(new WebViewClient());
    webView.Settings.JavaScriptEnabled = true;
    SetNativeControl (webView);
}

通常我们也可以继承WebViewClient 并覆盖ShouldOverrideUrlLoading ,如果它返回 true,则表示该方法已处理 URL,事件不应传播。

关于android - Xamarin Forms HybridWebview 始终在浏览器中打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44639839/

相关文章:

包含 Web 服务调用的 Xamarin PCL 初始屏幕

ios - 如何使用 MVVMCross 绑定(bind)到 UISegmentedControl 段的标题?

xamarin - 如何在完成之前取消计时器

android - 您可以在运行时注册 url Intent 吗?

android - 如何获取对 action.SEND 中选择的文件的引用

android - 如何在android studio中使用Ffmpeg?

c# - 跨应用钥匙串(keychain)访问,在哪里配置?

ios - Xamarin 表单 - IOS : How to detect the UIView size changed

android - 将 ListView 或 RecyclerView 添加到新的 NavigationView

android - Android Studio错误-修订版24.0.0-alpha1无效