通常我们在自己开发的APP中打开网页无非两种方法:一是跳转到系统自带的浏览器,二是使用WebView控件加载页面。使用WebView控件的好处就是可以通过各种api接口来定制各种行为,常用的几个设置地方为WebSettings、JavaScriptInterface、WebViewClient和WebChromeClient。平时出现的问题都可以通过修改这些设置来解决。
WebView.jpg
使用了WebView还是跳转到了系统自带的浏览器?
很简单的解决方法,为你的webview设置一个新的WebViewClient。
webView.setWebViewClient(newWebViewClient(){
OverridepublicbooleanshouldOverrideUrlLoading(WebViewview,Stringurl){view.loadUrl(url);returntrue;}});//或者直接添加,效果是一样的webView.setWebViewClient(newWebViewClient());
获取网页的标题和图标
通过WebChromeClient可以获取到这些信息。
webView.setWebChromeClient(newWebChromeClient(){
OverridepublicvoidonReceivedTitle(WebViewview,Stringtitle){super.onReceivedTitle(view,title);setTitle(title);}OverridepublicvoidonReceivedIcon(WebViewview,Bitmapicon){super.onReceivedIcon(view,icon);setIcon(icon);}});但是,这里有个问题,当通过webView.goBack()方式返回上一级Web页面的时候不会触发这个方法,因此会导致标题无法跟随历史记录返回上一级页面。所以需要在onPageFinished()中对界面标题重新设置。
webView.setWebViewClient(newWebViewClient(){
OverridepublicvoidonPageFinished(WebViewview,Stringurl){super.onPageFinished(view,url);setTitle(String.valueOf(view.getTitle()));}});返回键实现网页的后退键
在WebView中可以通过goBack()方法后退到历史记录的上一项。
//在Actvity中监听返回键按钮
OverridepublicvoidonBackPressed(){if(webView.canGoBack())webView.goBack();elsesuper.onBackPressed();}设置WebView的header
在WebView的loadUrl()方法中传入Header参数即可。
publicvoidloadURLWithHTTPHeaders(){finalStringurl="北京治疗白癜风哪里好白癜风治疗要花多少钱