높이를 '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);
그리고 webView가있는 레이아웃은 무엇입니까? – sygi
WebView는 수직 LinearLayout 내에 있습니다. – sirFunkenstine