android WebView 调用goBack()后标题不改变
2016-08-24 本文已影响2179人
元亨利贞o
今天遇到两个webview兼容性问题
项目里某些页面内嵌了h5页面. 这样的页面使用了
WebView
, 页面头部是ActionBar. 需求是ActionBar的title跟h5页面的标题要一致. 一般做法是给WebView设置WebChromeClient, 重写WebChromeClient的onReceivedTitle()方法, 在此方法中设置ActionBar的title. 因为onReceivedTitle方法的第二个参数就是html5页面的title .......
-
问题一: 在某些机型(如红米)上,
WebView
调用goBack()
方法后,onReceivedTitle( )
方法不调用 (加载页面时, onReceivedTitle方法是会调用的), 这样ActionBar上的标题和h5页面就对应不上. -
问题二: 在某些机型上(如
Vivo Xplay
系列, 系统为4.2.2), h5页面的高度不能渲染出来. 即css明明设置了高度, 但是h5页面却显示不出来. 如下面html文件的高度就没有渲染出来
<p style="width:300px; height:400px;background:red">Hello world !</p>
解决方法:
一. 标题问题解决方法
- 方法一
a. 在Activity添加一个标题栈记录标题:
Stack<String> titleStack = new Stack<String>();
者使用HashMap记录每个页面的标题, key为h5页面的url, value为标题, 如:
HashMap<String,String> titleStack = new HashMap<String,String>();
b. 在onReceivedTitle()方法中记录h5页面的title
c. 在退出页面是手动更新标题, 如: 在onBackPressed方法中, 调用goBack方法后, 将对应的title pop出来, 重新设置给ActionBar
- 方法二 (炒鸡简单)
a. 给WebView设置WebViewClient, 重写WebViewClient的onPageFinished()方法. goBack()方法调用后, 此方法也是会调用的, 因此, 可以在此方法中设置ActionBar的标题, 代码如下:
@Override
public void onPageFinished(WebView view, String url) {
ActionBar actionBar = getSupportActionBar();
actionBar.setTitle(view.getTitle());
}
二. css渲染问题的解决方法
添加如下语句即可(ws是WebSettings). 原因暂时不明, 知道的朋友可以告诉我, 非常感谢~~
ws.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL);
如有纰漏, 欢迎指正 ~~