现在用到webview的地方 都希望加载标题,但如果是多级页面,在返回的时候,有些版本的机器 特别是4.4 之前 并不会触发 onReceivedTitle ,网上有一堆方法,不过感觉都兼容性不好,
首页应该也是用一个hashmap存 url 和标题
private Map<String, String> titleMap = new HashMap<>();
其次在 WebChromeClient 中 覆写 onReceivedTitle 方法 ,注意的是过滤一下锚点,否则以后会很容易同没锚点的混淆
Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
tv_title_bar_title.setText(title);
String currentUrl = view.getUrl();
String cleanUrl = currentUrl.replaceAll("\\#(.*)?", "");
titleMap.put(cleanUrl, titleStr);
}
接下来才是关键 ,最好是在 WebViewClient 里面 覆写 onPageStarted 方法,而不是在其他方法里,这样可以获得最大的兼容性,这里对url的处理也应该去掉锚点
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
String cleanUrl = url.replaceAll("\\#(.*)?", "");
String str = titleMap.get(cleanUrl);
if(StringUtils.isNotBlank(str)) {
tv_title_bar_title.setText(str);
}
}