項目中有個界面是用來顯示一個網頁的,很簡單,放個WebView就ok了,可是返回按鈕放在哪 ,ui的設計是在底部顯示一個半透明的條,左邊有一個返回按鈕。這個條顯示在內容上面。我有一個擔心,就是要是最下面的內容需要操作的,雖然看的見,但不能操作。開始很自然就想到設padding,可是android的WebView有個bug,設了沒有用。
之后想了很多的辦法,通過判斷WebView滑動到底了,再自己做動畫,可是效果不是太好
if(Utils.dip2px(this,mWvContent.getContentHeight()) - mWvContent.getHeight() - mWvContent.getScaleY()== 0 ){}
這個判斷條件有點點問題,有時候,他到底了,可是不等於0,這個可以加點幅度。然后就是一開始我也是在網上找了些判斷,他們是直接用的getContentHeight(),實際使用中我發現在這個返回的是dp,我們需要轉成px。
我還想着重寫WebView,能力不怎么樣,只能想到重新測量高度,在OnDraw()方法里畫點底部的空白,可是都沒有能實現。
達不到效果,於是我不甘心的繼續在網上搜了下WebView 設 Padding,發現在個大神的:http://blog.csdn.net/janronehoo/article/details/45100551
我有想過通過js去改網頁,可是我js不怎么得,不會啊!當我看到標題時,高興的不行,最重要的是,問題解決了。謝謝大神
大神的代碼:
webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webView.loadUrl("javascript:document.body.style.padding=\"8%\"; void 0"); } });
和我想的效果差一點點,我就試着改了改,試過padding-bottom不行,paddingBottom可以,反正不懂,也就沒有細究,實現就行,然后就是怎么設固定高度,而不是百分比。
mWvContent.loadUrl("javascript:document.body.style.paddingBottom=\"" + Utils.px2dip(this, mTvBack.getHeight()) + "px\"; void 0");
需要注意的是,執行js需要在page load 結束之后,大神代碼中的onPageFinished()方法,有時候一些網頁是不會調用的,所以還需要一些其他的,比如onReceivedSslError()方法,這也是在一些大神那看到的,感謝n多大神的分享。