Android学习——WebView
WebView
WebView简介
WebView组件是Android提供用于显示网页信息,它内置了WebKit引擎,WebKit是一个开源的浏览器引擎,Chrome浏览器也是基于它,所有我们可以把WebView当做一个轻量级的浏览器使用。
使用WebView加载网页
<WebView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/webView"/>
加载网页:
webView.loaderUrl("http://www.baidu.com");
加载本地文件
webView.loadUrl("file:///android_assets/xxx.html");
使用loadData加载html数据
webView.loadData("<html><title></title><body>hello webView!</body></html","text/html","utf-8");
WebView参数设置
package com.example.volly;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class Main4Activity extends AppCompatActivity {
private WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
webView=findViewById(R.id.webView);
// webView.loadData("<html><title></title><body>hello webView!</body></html","text/html","utf-8");
WebSettings settings=webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(true);
webView.requestFocus();
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
//设置点击链接在当前webview显示
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
//处理标题、图标等
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
});
webView.loadUrl("http://www.baidu.com");
}
}
回退键设置
重写onKeyDown事件
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_BACK&&webView.canGoBack()){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
与JS的交互
addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个Java对象绑定到一个Javascript对象中,Javascript对象名就是interfaceName(demo),作用域是Global。这样初始化webView后,在webView加载的页面就可以直接通过Javascript:window.demo访问到绑定的java对象。
创建一个assets文件包,里面放入html文件
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>hello webView</title>
<script language="JavaScript">
!-->
function myfun(){
document.getElementById("imgid").src="b.jpg";
}
//-->
</script>
</head>
<body>
<a "window.demo.clickOnAndroid()">
<img src="a.jpg" id="imgid" width="300" height="300">
</a>
</body>
</html>
package com.example.volly;
import android.annotation.SuppressLint;
import android.os.Handler;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class Main4Activity extends AppCompatActivity {
private WebView webView;
private Handler handler;
@SuppressLint("JavascriptInterface")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main4);
webView=findViewById(R.id.webView);
handler=new Handler();
// webView.loadData("<html><title></title><body>hello webView!</body></html","text/html","utf-8");
WebSettings settings=webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setSupportZoom(true);
settings.setBuiltInZoomControls(true);
webView.requestFocus();
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
//设置点击链接在当前webview显示
webView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
//处理标题、图标等
webView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
}
});
webView.addJavascriptInterface(new MyObject(),"demo");
webView.loadUrl("file:///android_asset/index.html");
}
public class MyObject{
public void clickOnAndroid(){
handler.post(new Runnable() {
@Override
public void run() {
webView.loadUrl("javascript:myfun()");
}
});
}
}
//设置回退键
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode==KeyEvent.KEYCODE_BACK&&webView.canGoBack()){
webView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}