通過js給android控件WebView設padding


項目中有個界面是用來顯示一個網頁的,很簡單,放個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多大神的分享。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM