2015-09-30 5 views
6

Я пытаюсь добавить еще пустое место в загруженный WebView с помощью JavaScript.Android WebView добавляет странное пустое место внизу

Я загружаю данные, используя loadDataWithBaseUrl() с String ресурс. Затем, после измерения некоторого содержимого, мне нужно сделать WebView больше, скажем, на 100 пикселей. Поэтому я вызвать функцию JavaScript с помощью loadDataWithBaseUrl():

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

Javascript функция определена в исходном HTML:

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

После этого WebView изменяет себя в соответствии с новым содержанием. Однако результирующая высота не оригиналаSize + 100px, но больше. Я не знаю, где проблема. Я не могу определить размер цели, потому что он зависит от размера добавленного div, и он будет всегда другим.

Кто-нибудь пробовал это? Вы знакомы с этим поведением?

+0

Возможный дубликат [Как уменьшить размер веб-виджета в зависимости от его содержимого?] (Http://stackoverflow.com/questions/15546416/how-to-shrink-webview-size-dynamically-according-to-its- контент) – e4c5

+0

вы можете добавить немного больше кода, чтобы мы могли получить лучшее изображение, пожалуйста? –

+0

Под «итоговой высотой» вы имеете в виду высоту элемента представления WebView (на стороне Android) или размеры страницы, о чем сообщает 'window.innerHeight' или' window.outerHeight' в вашем JavaScript-коде? –

ответ

2

I found the next solution. Там использовался обратный вызов JS. Я надеюсь, это поможет вам. Это изменение размера должно работать лучше, чем динамическое.

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

И см. Пункт 4 of this list. Удачи!

+2

Использование Android 5.1.1 ничего не происходит - настройка LayoutParams вообще не изменяет WebView. – Hawk