Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
调用SetWebViewClient后,Xamarin Android WebView不会在浏览器中打开链接_Xamarin_Xamarin.android_Android Webview - Fatal编程技术网

调用SetWebViewClient后,Xamarin Android WebView不会在浏览器中打开链接

调用SetWebViewClient后,Xamarin Android WebView不会在浏览器中打开链接,xamarin,xamarin.android,android-webview,Xamarin,Xamarin.android,Android Webview,我有一个简单的webview,它正在加载一些本地存储的HTML。HTML中有普通的链接,如。当用户点击其中一个链接时,我希望设备浏览器打开 这是Android webview的默认行为,似乎工作正常,但只要调用webview.SetWebViewClient(webViewClient)方法,此默认行为就会停止 在我实现的WebViewClient类中,我尝试重写ShouldOverrideUrlLoading()方法以自己打开浏览器,但这些方法从未被调用 总而言之,我的HTML中的链接将在浏览

我有一个简单的webview,它正在加载一些本地存储的HTML。HTML中有普通的链接,如
。当用户点击其中一个链接时,我希望设备浏览器打开

这是Android webview的默认行为,似乎工作正常,但只要调用
webview.SetWebViewClient(webViewClient)
方法,此默认行为就会停止

在我实现的
WebViewClient
类中,我尝试重写
ShouldOverrideUrlLoading()
方法以自己打开浏览器,但这些方法从未被调用

总而言之,我的HTML中的链接将在浏览器中打开:

webView = new WebView(Activity);

//var webViewClient = new WebViewClient();
//webView.SetWebViewClient(webViewClient);

webView.LoadData(myHTML, "text/html", null);

但是一旦我取消注释这两行,链接就会在WebView中打开。

我不确定为什么您的类中没有调用您的ShouldOverrideUrlLoading方法,因为我没有查看您的所有代码。因此,我总结了一个完整的工作示例,您可以在其中控制链接的打开方式——无论是在webview视图中还是在其他Android浏览器活动中。我希望有帮助

WebView.axml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/WebView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent">
    <WebView
        android:id="@+id/webviewMain"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFFFFF" />
</LinearLayout>

testwebview.html(“项目中的Assets/html/testwebview.html”)


网络视图测试
选择一个链接。。。


WebViewCustomOverrideActivity.cs

using Android.App;
using Android.OS;
using Android.Webkit;
using Android.Content;

namespace XamdroidMaster.Activities {

    [Activity(Label = "Custom WebView Testing", MainLauncher = true)]
    public class WebViewCustomOverrideActivity : Activity {

        protected override void OnCreate(Bundle savedInstanceState) {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.WebView);
            WebView wv = FindViewById<WebView>(Resource.Id.webviewMain);

            MyWebViewClient myWebViewClient = new MyWebViewClient();
            wv.SetWebViewClient(myWebViewClient);

            wv.LoadUrl("file:///android_asset/html/testwebview.html");  // "Assets/html/testwebview.html" in project
        }

    }

    public class MyWebViewClient : WebViewClient {

        public override bool ShouldOverrideUrlLoading(WebView view, string url) {

            if (url.ToLower().Contains("google.com")) {
                // Let my WebView load the page
                return false;
            }

            // For all other links, launch another Activity that handles URLs
            var intent = new Intent(Intent.ActionView, Android.Net.Uri.Parse(url));
            view.Context.StartActivity(intent);
            return true;

        }

    }

}
使用Android.App;
使用Android.OS;
使用Android.Webkit;
使用Android.Content;
命名空间XamdroidMaster.Activities{
[活动(Label=“自定义WebView测试”,MainLauncher=true)]
公共类WebViewCustomOverrideActivity:活动{
创建时受保护的覆盖无效(Bundle savedInstanceState){
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.WebView);
WebView wv=findviewbyd(Resource.Id.webviewMain);
MyWebViewClient MyWebViewClient=新建MyWebViewClient();
wv.SetWebViewClient(myWebViewClient);
wv.LoadUrl(“file:///android_asset/html/testwebview.html“”;/“项目中的资产/html/testwebview.html”
}
}
公共类MyWebViewClient:WebViewClient{
公共重写bool ShouldOverrideUrlLoading(WebView视图,字符串url){
如果(url.ToLower().Contains(“google.com”)){
//让我的WebView加载页面
返回false;
}
//对于所有其他链接,启动另一个处理URL的活动
var intent=newintent(intent.ActionView,Android.Net.Uri.Parse(url));
视图、上下文、起始触觉(意图);
返回true;
}
}
}

我不知道为什么您的类中没有调用您的ShouldOverrideUrlLoading方法,因为我没有查看您的所有代码。因此,我总结了一个完整的工作示例,您可以在其中控制链接的打开方式——无论是在webview视图中还是在其他Android浏览器活动中。我希望有帮助

WebView.axml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/WebView"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent">
    <WebView
        android:id="@+id/webviewMain"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="#FFFFFF" />
</LinearLayout>

testwebview.html(“项目中的Assets/html/testwebview.html”)


网络视图测试
选择一个链接。。。


WebViewCustomOverrideActivity.cs

using Android.App;
using Android.OS;
using Android.Webkit;
using Android.Content;

namespace XamdroidMaster.Activities {

    [Activity(Label = "Custom WebView Testing", MainLauncher = true)]
    public class WebViewCustomOverrideActivity : Activity {

        protected override void OnCreate(Bundle savedInstanceState) {
            base.OnCreate(savedInstanceState);

            SetContentView(Resource.Layout.WebView);
            WebView wv = FindViewById<WebView>(Resource.Id.webviewMain);

            MyWebViewClient myWebViewClient = new MyWebViewClient();
            wv.SetWebViewClient(myWebViewClient);

            wv.LoadUrl("file:///android_asset/html/testwebview.html");  // "Assets/html/testwebview.html" in project
        }

    }

    public class MyWebViewClient : WebViewClient {

        public override bool ShouldOverrideUrlLoading(WebView view, string url) {

            if (url.ToLower().Contains("google.com")) {
                // Let my WebView load the page
                return false;
            }

            // For all other links, launch another Activity that handles URLs
            var intent = new Intent(Intent.ActionView, Android.Net.Uri.Parse(url));
            view.Context.StartActivity(intent);
            return true;

        }

    }

}
使用Android.App;
使用Android.OS;
使用Android.Webkit;
使用Android.Content;
命名空间XamdroidMaster.Activities{
[活动(Label=“自定义WebView测试”,MainLauncher=true)]
公共类WebViewCustomOverrideActivity:活动{
创建时受保护的覆盖无效(Bundle savedInstanceState){
base.OnCreate(savedInstanceState);
SetContentView(Resource.Layout.WebView);
WebView wv=findviewbyd(Resource.Id.webviewMain);
MyWebViewClient MyWebViewClient=新建MyWebViewClient();
wv.SetWebViewClient(myWebViewClient);
wv.LoadUrl(“file:///android_asset/html/testwebview.html“”;/“项目中的资产/html/testwebview.html”
}
}
公共类MyWebViewClient:WebViewClient{
公共重写bool ShouldOverrideUrlLoading(WebView视图,字符串url){
如果(url.ToLower().Contains(“google.com”)){
//让我的WebView加载页面
返回false;
}
//对于所有其他链接,启动另一个处理URL的活动
var intent=newintent(intent.ActionView,Android.Net.Uri.Parse(url));
视图、上下文、起始触觉(意图);
返回true;
}
}
}