我有一个简单的Web视图,正在加载一些本地存储的HTML。 HTML中有普通的香草链接,例如<a href="https://google.com"/>
。当用户点击这些链接之一时,我希望打开设备浏览器。
这是Android网络视图的默认行为,并且似乎可以正常工作,但是,一旦我调用webView.SetWebViewClient(webViewClient)
方法,该默认行为就会停止。
我尝试在实现ShouldOverrideUrlLoading()
类的过程中重写WebViewClient
方法来自己打开浏览器,但是这些方法从未被调用。
总结一下,我的HTML中的链接将在浏览器中打开:
webView = new WebView(Activity);
//var webViewClient = new WebViewClient();
//webView.SetWebViewClient(webViewClient);
webView.LoadData(myHTML, "text/html", null);
但是,只要我取消注释这两行,链接就会在WebView中打开。
答案 0 :(得分:0)
我不确定为什么没有在您的类中调用您的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”)
<html>
<head>
<title>WebView Testing</title>
</head>
<body>
<h1>Select a link...</h1>
<br />
<a href="https://www.google.com">Google</a>
<br />
<a href="https://stackoverflow.com">Stack Overflow</a>
</body>
</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;
}
}
}