前言
1、加载网页
2、加载URL(网络或本地assets文件夹下的html文件)
3、加载html代码
4、Native和JavaScript互相调用
加载网络URL
webview.loadUrl(“http://www.xxxxxx.cn”);
加载assets下的html文件
webview.loadUrl(“file:android_asset/test.html”);
加载html代码
webview.loadData(); 可能出现乱码
webview.loadDataWithBaseURL(); 基本不会出现乱码情况
网页的前进后退
webview.canGoBack()
webview.goBack()
webview.canGoForward()
webview.goForward()
webview.canGoBackOrForward(int steps) //是否可以返回或前进 +前,-后
webview.GoBackOrForward(int steps)
按下返回键,默认退出当前Acitivity,如果希望是WebView内页后退
public boolen onKeyDown(int keyCode,keyEvent event){
if((keyCode == keyEvent.KEYCODE_BACK)&&webview.canGoBack()){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode,event);
}
代码演示:
1、默认打开https://m.baidu.com
2、在本地浏览器运行不跳转谷歌
3、返回按钮不直接返回整个Activity
private WebView mWvmain;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_web_view);
mWvmain = findViewById(R.id.wv);
//加载本地html
// mWvmain.loadUrl("file:android_asset/test.html");
//加载网络URL
mWvmain.getSettings().setJavaScriptEnabled(true);//支持js
mWvmain.setWebViewClient(new MyWebViewClient());//监听+重定向
mWvmain.setWebChromeClient(new MyWebChromeClient());//例如进度条和titile...
//mWvmain.addJavascriptInterface();
mWvmain.loadUrl("https://m.baidu.com");
}
class MyWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
view.loadUrl(request.getUrl().toString());
return true;
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
Log.d("WebView","onPageStarted");
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
Log.d("WebView","onPageFinished");
//mWvmain.loadUrl("javascript:alert('hello')");
mWvmain.evaluateJavascript("javascript:alert('hello')",null);
}
}
class MyWebChromeClient extends WebChromeClient{
@Override
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
}
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
setTitle(title);
}
}
@Override
//在网页中后退,重写keycode方法,正常返回退出activity此方法返回上一个页面
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && mWvmain.canGoBack()){
mWvmain.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
注意:
1、当使用webview加载网页时遇到网页加载出错,出现NET::ERR_CACHE_MISS的错误,解决方法只需要在你工程的AndroidManifest.xml文件中加入联网的权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
2、当使用webview加载网页时重定向不显示页面可能是需要js支持
代码如下:mWvmain.getSettings().setJavaScriptEnabled(true);