2015-09-30 8 views
6

Próbuję dodać więcej pustej przestrzeni do załadowanego WebView przy użyciu JavaScript.Android WebView dodaje dziwne puste miejsce na dole

Ładowanie danych przy użyciu loadDataWithBaseUrl() z zasobu String. Następnie, po zmierzeniu pewnej zawartości, muszę zwiększyć rozmiar WebView, powiedzmy na 100 pikseli. Więc wywołanie funkcji JavaScript za pomocą loadDataWithBaseUrl():

mWebView.loadUrl("javascript:addHeight()"); 

Javascript funkcja jest zdefiniowana w oryginalnym formacie HTML:

function addHeight() { " + 
    var elemDiv = document.createElement('div'); 
    elemDiv.style.cssText = 'height:100px;'; 
    document.body.appendChild(elemDiv); 
} 

po tym, WebView zmienia rozmiar dopasowuje się do nowych treści. Jednak wysokość wyniku nie jest równa originalSize + 100px, ale większa. Nie wiem, gdzie jest problem. Nie mogę określić docelowego rozmiaru, ponieważ zależy on od rozmiaru dołączonego div i zawsze będzie inny.

Czy ktoś próbował tego? Czy znasz to zachowanie?

+0

Możliwy duplikat [Jak zmniejszyć rozmiar WebView dynamicznie zgodnie z jego zawartością?] (Http://stackoverflow.com/questions/15546416/how-to-shrink-weviewview-size-dynamically-cording-to-its- treść) – e4c5

+0

czy możesz dodać trochę więcej kodu, abyśmy mogli uzyskać lepszy obraz, proszę? –

+0

Przez "wysokość wyniku" rozumiesz wysokość elementu widoku WebView (po stronie systemu Android) lub wymiary strony, które są zgłaszane przez 'window.innerHeight' lub' window.outerHeight' w twoim kodzie JavaScript? –

Odpowiedz

2

I found the next solution. Użyto wywołania zwrotnego JS. Mam nadzieję, że to Ci pomoże. Ta zmiana rozmiaru powinna działać lepiej niż dynamicznie.

private void setupWebView() { 
    webView.getSettings().setJavaScriptEnabled(true); 
    webView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onPageFinished(WebView view, String url) { 
      webView.loadUrl("javascript:MyApp.resize(document.body.getBoundingClientRect().height)"); 
      super.onPageFinished(view, url); 
     } 
    }); 
    webView.addJavascriptInterface(this, "MyApp"); 
} 
@JavascriptInterface 
public void resize(final float height) { 
    MyActivity.this.runOnUiThread(new Runnable() { 
     @Override 
     public void run() { 
      webView.setLayoutParams(new LinearLayout.LayoutParams(getResources().getDisplayMetrics().widthPixels, (int) (height * getResources().getDisplayMetrics().density))); 
     } 
    }); 
} 

Oraz z pkt 4 of this list. Powodzenia!

+2

W systemie Android 5.1.1 nic się nie dzieje - ustawienie LayoutParams w ogóle nie zmienia WebView. – Hawk