在js中获取内容的高度, 然后调用android里面的方法,设置webview的高度。 注意:黄色区域要修改成自己的元素 要运行在UI线程 要设置LayoutParams webView.getLayoutParams().height =height;是没有用的 为了效率,可以把已经获取到的高度保存下来,备用,获取到高度的内容就不用重复获取 private void setupWebView(final WebView webView) { webView.getSettings().setJavaScriptEnabled(true); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { System.out.println("finish"); webView.loadUrl("javascript:ViewHolder.resize(document.getElementById('test').scrollHeight)"); super.onPageFinished(view, url); } }); webView.addJavascriptInterface(this, "ViewHolder"); } @android.webkit.JavascriptInterface public void resize(final float height) { activity.runOnUiThread(new Runnable() { @Override public void run() { webView.setLayoutParams(new LinearLayout.LayoutParams( getResources().getDisplayMetrics().widthPixels, (int) ((height + 10) * getResources() .getDisplayMetrics().density))); System.out.println("height " + height); } }); } ListView 中复用webview 具体viewholder举例子 class ViewHolder { WebView webView; int position; public ViewHolder(View convertView) { this.webView = (WebView) convertView.findViewById(R.id.webview); setupWebView(this.webView); } private void loadingWeb(String content,int position) { this.position = position; webView.loadDataWithBaseURL(null, content, "text/html", "utf-8", null); if (heightMap.get(position) != null) { System.out.println("resize $$$$$$$$$$$"); resize(heightMap.get(position)); } } private void setupWebView(final WebView webView) { WebSettings settings = webView.getSettings(); settings.setJavaScriptEnabled(true); settings.setBlockNetworkImage(false); webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { System.out.println("finish " + heightMap.get(position)); if (heightMap.get(position) == null) { webView.loadUrl("javascript:ViewHolder.resize(document.getElementById('test').scrollHeight)"); } super.onPageFinished(view, url); } }); webView.addJavascriptInterface(this, "ViewHolder"); } @android.webkit.JavascriptInterface public void resize(final float height) { heightMap.put(position, height); activity.runOnUiThread(new Runnable() { @Override public void run() { webView.setLayoutParams(new LinearLayout.LayoutParams( getResources().getDisplayMetrics().widthPixels, (int) ((height + 10) * getResources() .getDisplayMetrics().density))); System.out.println("height " + height); } }); } } |
|
来自: Joselyn_cui > 《旷世难题》