首先,为了实现实时监听并更改WebView中的页面标题,我们需要借助于WebViewClient类的一个重要方法——`shouldOverrideUrlLoading()`以及JavaScript接口交互的方式来完成这一需求。
java
// 创建WebView实例及基本设置
webView = (WebView) findViewById(R.id.webView);
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true); // 允许执行JS
// 设置WebView客户端以捕获页面相关事件
webView.setWebViewClient(new MyCustomWebViewClient());
...
private class MyCustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
// 注册 JavaScript 接口以便从 JS 侧获取/更新 title
webView.addJavascriptInterface(new JsObject(), "android");
return true;
}
}
class JsObject {
@JavascriptInterface
void updateTitle(String newTitle){
runOnUiThread(() -> {
getSupportActionBar().setTitle(newTitle); // 或者替换为你实际操作界面元素的方法
});
}
}
上述步骤创建了一个继承了 `WebViewClient` 的定制类 `MyCustomWebViewClient` 并重写了其中的关键函数 `shouldOverrideUrlLoading()`. 每当web视图开始加载新URL的时候都会调用这个方法,我们在此处不仅让WebView继续加载url同时也注入了一段javascript interface到当前web页。
接下来的重点是 `JsObject` 类及其内部的静态方法 `updateTitle()`,该方法被标记为 `@JavascriptInterface`注解表示它可以由网页内的JavaScript脚本进行访问与调用。每当网页title发生变化或者需要主动设定新的title时,只需在HTML文档头部或者其他合适的地方利用js来触发此方法:
html
<script type="text/javascript">
window.onload = function () {
document.title_changed = function(title){ android.updateTitle(title); };
};
</script>
这样就建立起了Native Java层与网页前端JavaScript之间的桥梁,从而实现了对于正在加载或已加载完毕的WebView页面标题的动态修改功能。
总结来说,通过结合使用WebViewClient 和 Javascript Interface技术,开发者可以有效地监控并灵活地操控安卓应用程序中WebView呈现的网页标题行为,提升用户体验的同时也为跨平台的应用程序设计提供了更多可能。这项技巧体现了Android系统良好的开放性与扩展能力,使得我们可以深度整合native与web资源共同服务于用户场景的需求。