Android получает высоту содержимого веб-обозревателя после рендеринга

Я пытаюсь получить высоту веб-просмотра, как только он будет показан. Он всегда возвращает null, я пробовал getHeight , getMeasuredHeight , getContentHeight и всегда возвращает null.

Планировка:

 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/instructions" android:background="@color/transparent_black" > <WebView android:id="@+id/top_content" android:layout_width="match_parent" android:layout_height="wrap_content" /> </RelativeLayout> 

Мероприятия

 public class TestActivity extends MenuActivity { private final static String TAG = "HearingTest"; private String urlTopContent; private WebView topContent; private boolean mMoreInfoTop = true; private int mYdelta = 0; private int mBottomOffset = 0; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.right_hearing_test); String topHtml = this.getString(R.string.top_content); //String bottomHtml = this.getString(R.string.bottom_content); urlTopContent = "file:///android_asset/html/" + topHtml; WebViewSettings(); LoadWebPage(urlTopContent); } public void WebViewSettings(){ topContent = (WebView) findViewById(R.id.top_content); topContent.getSettings().setJavaScriptEnabled(true); topContent.getSettings().setBuiltInZoomControls(true); topContent.getSettings().setSupportZoom(true); topContent.getSettings().setLoadWithOverviewMode(true); topContent.setBackgroundColor(0); topContent.canGoBack(); int topHeight = topContent.getContentHeight(); Log.d("Top Height", "Height: " + topHeight); topContent.setWebViewClient(new WebViewClient(){ @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (Uri.parse(url).getHost().equals(urlTopContent)) { // This is my web site, so do not override; let my WebView load the page return false; } // Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); startActivity(intent); return true; } @Override public void onPageFinished(WebView view, String url) { View webViewHeight = (View) findViewById(R.id.top_content); int height = webViewHeight.getHeight(); Log.d("Top Content","Top Content Height:" + height); } }); } public void LoadWebPage(String url){ try { topContent.loadUrl(url); Log.d("Loading Web Page", "URL" + url + "connected"); } catch (Exception e) { Log.d("Loading Web Page", "URL: " + url + " couldn't connect."); } } } 

Я даже не знаю, можно ли получить высоту веб-представления после его рендеринга, но я не понимаю, почему вы не смогли. Если бы кто-то получил и решения, было бы весьма полезно.

Solutions Collecting From Web of "Android получает высоту содержимого веб-обозревателя после рендеринга"

Вы можете использовать ViewTreeObserver для этого WebView чтобы получить фактическую высоту после рендеринга его содержимого.

Вот пример кода.

 ViewTreeObserver viewTreeObserver = mWebView.getViewTreeObserver(); viewTreeObserver.addOnPreDrawListener(new OnPreDrawListener() { @Override public boolean onPreDraw() { int height = mWebView.getMeasuredHeight(); if( height != 0 ){ Toast.makeText(getActivity(), "height:"+height,Toast.LENGTH_SHORT).show(); mWebView.getViewTreeObserver().removeOnPreDrawListener(this); } return false; } });