2014-03-25 54 views
0

我遇到了問題,無法重新調整webView。我不完全確定如何解決這個問題。我有一個webView與我的應用程序中的ListView上方的自定義webViewClient。 WebView裏面有一個動態手風琴。當我點擊手風琴時,它會展開,當我再次單擊它時,它會再次展開或收回。SetSize WebView Android

我遇到的問題是,當內容收回時,webView保持其擴展大小,導致我的webView底部有很多空白區域。有沒有辦法在webView的ontouch方法中調用invalidate或setHeight來重新加載webView?或者在webViewClient中可以處理這個的一些重寫方法?

+0

什麼是webView所在的佈局? – sygi

+0

WebView位於垂直LinearLayout內。 – sirFunkenstine

回答

0

使用:android:descendantFocusability="blocksDescendants"在包裝的佈局,這將阻止web視圖跳轉到其開始

使用:webView.clearView();mNewsContent.requestLayout();每次更改的WebView尺寸佈局失效的時間,這將刪除空的間距

更多信息see

1

我猜你有高度設置爲「WRAP_CONTENT」。你觀察到的行爲是由於WebView中的一個錯誤,並且已經在4.4(KitKat)中修復了。

這個bug沒有很好的解決方法 - 您可以嘗試暫時強制每次手風琴單擊時WebView的高度回到0,但這會導致故障。或者 - 如果你控制你的內容,你可以更改運行時手風琴點擊告訴的WebView,它應該退縮到以前的高度的JavaScript:

class MyWebView { 
    private int previousHeight = -1; 

    @Override 
    public void onSizeChanged(int w, int h, int ow, int oh) { 
    super.onSizeChanged(w, h, ow, oh); 
    previousHeight = h; 
    } 

    public void accordionClicked() { 
    // I'm assuming the accordion is a toggle, so if you click it once 
    // it expands, you click it again - it shrinks. 
    LayoutParams lp = getLayoutParams(); 
    if (lp.height == LayoutParams.WRAP_CONTENT) 
    lp.height = previousHeight; 
    else 
    lp.height = LayoutParams.WRAP_CONTENT; 
    setLayoutParams(lp); 
    } 
} 

然後,您將需要使用addJavaScriptInterface,露出對於這樣你的JavaScript調用accordionClicked

class JsInterface { 
    private final WebView webView; 
    public JsInterface(WebView webView) { 
    this.webView = webView; 
    } 

    @JavascriptInterface 
    public void onAccordionClicked() { 
    webView.post(new Runnable() { 
     @Override 
     public void run() { 
     webView.accordionClicked(); 
     } 
    }); 
    } 
} 

你會再註冊這個接口在同一個地方,你新出的WebView:

webView.addJavaScriptInterface("jsInterface", new JsInterface(webView); 

最後,調用它在你的JavaScript:

function accordionClicke() { 
    ... 
    jsInterface.onAccordionClicked(); 
} 

如果你的手風琴是比較複雜的,你可以計算在JavaScript內容的高度,並將其傳遞迴的WebView:

jsInterface.onAccordionClicked(document.body.clientHeight); 

然後使用它來設置正確的高度:

public void accordionClicked(int heightCss) { 
    LayoutParams lp = getLayoutParams(); 
    lp.height = (int) (heightCss * getScale()); 
    setLayoutParams(lp); 
0

其實有一種方法。在更新內容之前使用它:

myWebView.loadUrl("about:blank");