2014-03-25 4 views
0

A webView에 문제가 있습니다. 크기가 조정되지 않았습니다. 이 문제에 접근하는 방법을 정확히 모르겠다. 내 응용 프로그램에서 ListView 위에 사용자 지정 webViewClient가있는 webView가 있습니다. WebView에는 동적 아코디언이 있습니다. 내가 아코디언을 클릭하면 확장되고, 다시 클릭하면 다시 펼쳐지거나 축소됩니다.SetSize WebView 안드로이드

내가 가지고있는 문제는 콘텐츠가 축소되는 동안 webView가 확장 된 크기로 유지되어 내 webView 하단에 많은 공백이 생기는 것입니다. WebView를 다시로드하는 ontouch 메서드에서 invalidate 또는 setHeight를 호출하는 방법이 있습니까? 또는 이것을 처리 할 수있는 webViewClient의 일부 대체 메서드가 있습니까?

+0

그리고 webView가있는 레이아웃은 무엇입니까? – sygi

+0

WebView는 수직 LinearLayout 내에 있습니다. – sirFunkenstine

답변

0

사용 : android:descendantFocusability="blocksDescendants" 포장의 레이아웃이 그 시작 점프에서 웹보기를 방지 할 수

사용 : webView.clearView();mNewsContent.requestLayout(); 당신이 레이아웃을 무효화하기 위해 웹보기 크기를 변경할 때마다,이 빈 공간을 제거합니다

자세한 내용은 see :

1

높이를 'wrap_content'로 설정 한 것으로 추정됩니다. 관찰중인 동작은 WebView의 버그로 인해 발생하며 4.4 (KitKat)에서 수정되었습니다.

버그가있는 좋은 해결 방법은 없습니다. 아코디언을 클릭 할 때마다 임시로 WebView의 높이를 0으로 강제 설정할 수 있지만 결함이 발생할 수 있습니다. 당신은 다음을 노출 addJavaScriptInterface을 사용해야합니다

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); 
    } 
} 

: - 또는 당신이 당신의 내용을 제어하는 ​​경우는 아코디언 그것은 이전의 높이로 다시 축소해야하는 웹보기를 말할를 클릭 할 때 실행되는 자바 스크립트를 변경할 수 있습니다

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

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(); 
     } 
    }); 
    } 
} 

그런 다음 같은 장소에 당신이 새로운 웹보기를이 인터페이스를 등록 할 것 : 자바 스크립트가 accordionClicked 호출 할 방법

마지막으로, 자바 스크립트에서 호출 :

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

당신의 아코디언 더 자바 스크립트에서 콘텐츠의 높이를 계산하고 웹보기로 다시 전달할 수 복잡한 경우 :

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");