demo
mWebviewContent.setWebViewClient(new WebViewClient() {
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
.....
.....
}
详解
setWebViewClient
- 如果没有给WebView设置WebViewClient,那么,点击webview内的a链接,就会出现该链接跳转到系统本身的浏览器去打开等问题
- 所以,要给webview加上
mWebview.setWebViewClient(...........)
shouldOverrideUrlLoading
- 如果webview出现了点击webview里的链接却跳到了手机自带浏览器的问题, 应该检查是否在
setWebViewClient
中重写了 shouldOverrideUrlLoading()
方法 :
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url) {
webView.loadUrl(url);
return true;
}
- setWebViewClient 返回值是 Boolean 类型 , 无论返回 true 还是 false , 都是在 webview 里加载 , 不会跳到系统自带浏览器 .
- 如果设置了WebViewClient且本方法返回true,就表示已经处理了这个url;如果返回false,就表示让当前webview来处理url。如果你的WebViewClient不想处理,那就把事件传给WebView,WebView的处理方式就是加载。
onLoadResource
- 在加载页面资源时会调用,每一个资源(比如图片)的加载都会调用一次。
@Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
onProgressChanged
- 加载进度. 如果要设置进度条之类的, 可以在这个方法里 .
执行顺序
先看一个demo
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<WebView
android:id="@+id/webview_content"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
package com.example.demo0403;
import android.content.Intent;
import android.graphics.Bitmap;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.annotation.RequiresApi;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.KeyEvent;
import android.webkit.JsResult;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private String mTag = getClass().getSimpleName();
private WebView mWebviewContent;
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initWebview();
mWebviewContent.loadUrl("https://www.baidu.com/");
}
private void initView() {
mWebviewContent = findViewById(R.id.webview_content);
}
@RequiresApi(api = Build.VERSION_CODES