接下来打算写写目前对WebView的了解,以及它相关的使用,介绍几个重要的方法,和使用中应该注意的事宜。
内容简介:
怎么new
WebView
(搞笑了、、、)!webChromeClient
&&webViewClient
的重要方法- url加载处理
- 进度条设置
- tittle设置
- 错误处理
- 全屏设置
Android
&JS
的互调WebView
的后退处理
布局时的注意事项:
It is recommended to set the WebView layout height to a fixed value or to MATCH_PARENT instead of using WRAP_CONTENT. When using MATCH_PARENT for the height none of the WebView’s parents should use a WRAP_CONTENT layout height since that could result in incorrect sizing of the views.
意思就是建议我们要使用match_parent的布局,并且match_parent时,它的父布局不要是wrap_content!
1.创建一个
WebView
,加载一个url
:WebView myWebView = (WebView) findViewById(R.id.webview); myWebView.loadUrl("http://www.lovejjfg.com");
这样的话,其实就有效果了!就是纯粹的加载webPage
的效果!
但是请注意非常重要的一点:添加网络权限
<uses-permission android:name="android.permission.INTERNET" />
2.
WebView
中重要的两个Client
:WebChromeClient webChromeClient = new WebChromeClient() { //加载进度改变的回调 @Override public void onProgressChanged(WebView view, int newProgress) { super.onProgressChanged(view, newProgress); if (newProgress == 100) { mPb.setVisibility(View.GONE); } else { mPb.setProgress(newProgress); } } //获取tittle @Override public void onReceivedTitle(WebView view, String title) { super.onReceivedTitle(view, title); } //这三个方法在WebView需要全屏播放是需要复写。。。。 @Override public void onShowCustomView(View view, CustomViewCallback callback) { super.onShowCustomView(view, callback); } @Override public void onHideCustomView() { super.onHideCustomView(); } @Override public View getVideoLoadingProgressView() { return super.getVideoLoadingProgressView(); } }; WebViewClient webViewClient = new WebViewClient() { //网页加载完成回调 @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { //页面加载错误的时候回调 } //我们是否处理url加载 @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { mTopSlidWebView.loadUrl(url); return true; } //webView开始加载 @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); mPb.setVisibility(View.VISIBLE); } };
shouldOverrideUrlLoading()
的方法其实很重要,如果我们需要处理url,就需要返回true,一般的写法就是在这里更具url的处理逻辑:
if (Uri.parse(url).getHost().equals("www.lovejfg.com")) {
view.loadUrl(url);
return true;
}else{
//doSomething..
}
- 3.然后说说
webView
的Js
和本地互调:
WebView
默认是不支持JavaScript
的,所以要使用的话,第一步肯定是打开 开关 :
WebView myWebView = (WebView) findViewById(R.id.webview);
WebSettings webSettings = myWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
好了,这样就可以使用js了!
mWebView.addJavascriptInterface(new JsCallback() {
@JavascriptInterface
public void onJsCallback() {
Toast.makeText(getApplicationContext(), "XXXXXXXXX", Toast.LENGTH_LONG).show();
}
}, "demo");
定义接口:
public interface JsCallback {
@JavascriptInterface
public void onJsCallback();
}
demo
是你对应的调用的文件名称!
这里需要注意:如果你的版本是API17或者更高,那么在js的回调方法上面必须添加@JavascriptInterface
的注解,不然的话,这个方法将无法回调!
demo文件的相关代码(可以直接copy):
/* This function is invoked by the activity */
function showAlert() {
alert("Android调用Js啦");
}
咳咳,这里需要注意onclick方法的写法:window.demo.onJsCallback()
,以window
开头,后面接你html
的名称,最后这个 onJsCallback()
其实就是你在接口中定义的方法!!
点击第一个,是
js
调用Android
的本地方法,你完全可以在这里打电话,开页面,发广播。。。点击第二个,是调用js的
showAlert()
的方法。
4.WebView的后退处理:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 检测是back并且WebView可以后退 if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) { myWebView.goBack(); return true; } return super.onKeyDown(keyCode, event); }
OK!更多的请参考—>官方文档(其实我也是搬运工啦!!)
其实还有错误处理没有讲解,下一篇来写一写吧!