本文主要总结归纳了WebView的使用方式:
-
加载URL:webview.loadURL("");
-
加载HTML代码webview.loadData();webview.loadDataWithBaseURL();
-
Navie和javaScript间的相互调用
在使用WebView的时候最开始一定要记得在manifest中添加网络权限:
<uses-permission android:name="android.permission.INTERNET" />
写一个WebView控件用作演示:
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
——————————————————————————————————————————————————
1、加载URL
1.1 加载网络URL
mWvMain=findViewById(R.id.web_view);
mWvMain.loadUrl("http://baidu.com");
运行效果:
但是此处要特别注意,webview加载页面的话需要JS的支持,而webview不支持JS,所以我们要使用gettsettings().setJavaScriptEnable(true);的方法来保证能成功加载页面,上面的那种写法不一定可以成功加载!
mWvMain.getSettings().setJavaScriptEnabled(true);
mWvMain.loadUrl("http://m.baidu.com");
在安卓27以上是不能使用http://协议了,需要在在manifest中添加来支持http://协议
android:usesCleartextTraffic="true
实现点击“返回”返回到的界面时浏览器而非activity:
webviewclient: 主要用于帮助webview处理相关请求事件和通知
WebChromeClient: 主要用于处理与JavaScript相关的处理操作
法一:在webview中的跳转默认是用手机浏览器打开,可以去写一个类继承webviewclient
class MyWebViewClient extends WebViewClient{
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@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...");
}
}
设置浏览器内部返回(依靠监听返回)
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(keyCode == KeyEvent.KEYCODE_BACK && mWvMain.canGoBack()){
mWvMain.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
法二:继承 WebChromeClient,但是WebChromeClient和webviewClient不能同时使用,不然会报错
class MyWebChromeClinet 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);
}
}
加载网络URL
mWvMain=findViewById(R.id.web_view);
//加载网络URL
mWvMain.getSettings().setJavaScriptEnabled(true);
mWvMain.setWebChromeClient(new MyWebChromeClinet());
mWvMain.loadUrl("http://m.baidu.com");
1.2 加载本地assets下的HTML文件
<html>
hello world!
</html>
WvMain=findViewById(R.id.web_view);
WvMain.loadUrl("file:///android_asset/text.html");
运行效果:
2、加载HTML代码
webview.loadData();webview.loadDataWithBaseURL();使用方法同1中的内容
网页的前进后退:
能否返回/前进:webview.canGoBack() webview.canGoForward()
可以返回/前进:webview.goBack() webview.goForward()
前进及后退:webview.canGoBackOrForward(int step)
webview.goBackOrForward(int step)
3、Navie和javaScript间的相互调用
.evalateeJavaScript()或.loadURL("")中都可以写JavaScript代码,但是只有使用webchromeClient的时候JS才有效:
class MyWebViewClient extends WebViewClient{
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@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')");
}
}