在Android6.0系统里面,onReceivedTitle方法默认会调用两边,第一遍title现实的是当前webview的url,第二遍才是从连接中获取的tiitle,因此为了避免刷新webview的时候,会在title的位置显示url,可以做如下处理
webView.setWebChromeClient(new WebChromeClient() { @Override public void onReceivedTitle(WebView webView, String title) { //为解决6.0系统上,这个api会调用两次,而且第一次是显示url的系统bug if(null != title && !StringUtils.getRemoveHttpUrl(title).equals(StringUtils.getRemoveHttpUrl(webView.getUrl()))){ activity.setTitle(title); } } @Override public void onProgressChanged(WebView view, int newProgress) { if (newProgress == 100) { } } });
/** * 获取去掉协议头的url * @param url * @return * @auther jmtian */ public static String getRemoveHttpUrl(String url){ return url.replace("http://","").replace("https://",""); }
备注:这里之所以做去掉协议头的处理,是因为我调试的时候发现,title包含的url,有时候有协议头,有时候没有,这个具体为什么,我也不太清楚,有知道的小伙伴,希望告知。因此,我就直接把协议头去掉,只做后面url内容的比较。
今天再补充一下,发现自己脑子短路了,判断匹配那里不需要那么麻烦就行,只需要如下,判断提提了是否包含在url里面即可,另外,也发现了,为什么title里面有时有协议头,有时没有。(当url是http://的时候,title里面不含http://,当url是https://的时候,title里面就包含https://)
@Override public void onReceivedTitle(WebView webView, String title) { //为解决6.0系统上,这个api会调用两次,而且第一次是显示url的系统bug if(null != title && !webView.getUrl().contains(title)){ activity.setTitle(title); } }