webview中都会需要做个header头,上面有个返回按钮和当前页面的标题
首选处理获取标题功能 webview 封装好了一个函数,直接调用就可以TextView webview_title = (TextView) findViewById(R.id.webview_title);
WebView webView = (WebView) findViewById(R.id.web_view);
Button back_button = (Button) findViewById(R.id.back_button);
//...加载代码以及其余代码省略
//获取当前html的title 并赋值给webview_title
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onReceivedTitle(WebView view, String title) {
// TODO Auto-generated method stub
super.onReceivedTitle(view, title);
webview_title.setText(title);
//titles.add(title);
}
});
webview返回按钮 以及手机返回键的返回功能//手机返回键 返回功能
webView.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (event.getAction() == KeyEvent.ACTION_DOWN) {
if (keyCode == KeyEvent.KEYCODE_BACK && webView.canGoBack()) {
webView.goBack();
//titles.remove(titles.size() - 1);
//webview_title.setText(titles.get(titles.size() - 1));
return true;
}
}
return false;
}
});
//webview的header的返回按钮的返回功能
back.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
webView.goBack();
/*if (titles.size() > 1) {
titles.remove(titles.size() - 1);
webview_title.setText(titles.get(titles.size() - 1));
} else {
WebViewActivity.this.finish();
}*/
}
});
基本的功能都实现了,运行后尝试下,会发现一个问题,在webview中,点进去可以,webview头上的title显示正常,返回时webview的title不会改变,也就是public void onReceivedTitle();
这个方法返回时不会执行,
解决方法:自己写个List集合List titles = new ArrayList();
获取html的title时候顺便将该title添加进titles
返回时remove掉最后一个,在从titles中取最后一个赋给webview的title
具体逻辑,取消上面3个方法中的代码注释