1.加载页面
1.1.web资源
webview.loadUrl("http://192.168.1.100:8080/Web/index.html")
1.2.本地资源
本地文件使用:webView.loadUrl("file://android_asset/XX.html");
本地文件存放位置:assets文件夹中
2.监听页面加载状态,提高用户体验
webview.setWebChromeClient(new WebChromeClient()
{
@Override
public void onProgressChanged(WebView view, int newProgress)
{
if(newProgress == 100)
{
closeDialog();
}
else
{
openDialog(newProgress);
}
}
});
protected void closeDialog()
{
if(dialog!=null&&dialog.isShowing()){
dialog.dismiss();
dialog=null;
}
}
protected void openDialog(int newProgress)
{
if(dialog == null)
{
dialog = new ProgressDialog(this);
dialog.setTitle("加载中...");
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setProgress(newProgress);
dialog.setCancelable(false);
dialog.show();
}else{
dialog.setProgress(newProgress);
dialog.show();
}
}
3.Android调用js
3.1.android代码
findViewById(R.id.ask_js_btn).setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
mHandler.post(new Runnable()
{
public void run()
{
webview.loadUrl("javascript:wave()");
}
});
}
});
3.2.页面js代码
<script type="text/javascript">
function wave() {
document.getElementById("droid").src="portrait1.jpeg";
};
</script>
4.js调用Android方法
4.1.js代码
<a onClick="window.demo.clickOnAndroid()">
<img id="droid"src="portrait2.jpeg"/>
<br>Click me!
</a>
4.2.android代码
//addJavascriptInterface(Object obj,String interfaceName)这个方法,该方法将一个java对象绑定到一个javascript对象中,javascript对象名就是 interfaceName(demo),
//作用域是Global。这样初始化webview后,在webview加载的页面中就可以直接通过 javascript:window.demo访问到绑定的java对象了。
webview.addJavascriptInterface(new Object()
{
public void clickOnAndroid()
{
mHandler.post(new Runnable()
{
public void run()
{
Toast.makeText(WebActivity.this, "页面点击了!", Toast.LENGTH_SHORT).show();
webview.loadUrl("javascript:wave()");
}
});
}
}, "demo");
5.提升webview浏览网页速度提升
5.1.代码实现
//设置webview优先使用缓存加载
webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
5.2.缓存位置
data/data/包名/cache;data/data/包名/database ===>缓存在这个里面
如果我们要清缓存,只要清除这两个文件夹就可以了;
6.注意点总结
1.网络权限的设置
AndroidManifest.xml中必须使用许可"android.permission.INTERNET",否则会出Web page not available错误。
2.JavaScript属性开关设置
如果访问的页面中有Javascript,则webview必须设置支持Javascript。
webview.getSettings().setJavaScriptEnabled(true);
3.是否新开android浏览器打开连接设置
如果页面中链接,如果希望点击链接继续在当前browser中响应,而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
mWebView.setWebViewClient(new WebViewClient(){
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
6.4.4.系统BACK键功能拦截
如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身;
如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
else if((keyCode == KeyEvent.KEYCODE_BACK) && !webview.canGoBack())
{
finish();
return true;
}
return super.onKeyDown(keyCode, event);
}