现在用到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);
}
}
WebView 返回键 onReceivedTitle 不触发 问题解决
最新推荐文章于 2022-06-30 19:42:25 发布
本文介绍了一种在使用WebView时确保各个页面标题正确加载的方法。通过使用HashMap存储URL及其对应的标题,并在onReceivedTitle中更新标题,同时在onPageStarted中从HashMap中获取并设置标题,实现了跨版本兼容性。
3485

被折叠的 条评论
为什么被折叠?



