2009-10-23 79 views
5

WebViewの幅と高さを決めたいと思います。私はすでに使用して、それを試してみました:androidのWebviewの幅と高さを取得する方法

webView.getWidth(); 
webView.getHeight(); 

をしかし、結果のログは常に0

+1

あなたのコードを投稿することができますか?レイアウトがまだ発生していないため、OnCreateメソッドでビューの幅と高さを取得できないことに注意してください。 – Whaledawg

+0

私のコードはここに置くheight = mainWebView.getHeight(); System.err.println( "合計高さを表示 - >" + mainWebView.getHeight()); System.err.println( "高さの測定 - >" + mainWebView.getMeasuredHeight()); –

答えて

1

なるためにそれらを示しうーん - 私はWevViewソースから見て、私は内部的に、彼らはビュー#のgetWidthとを使用していることがわかりますビュー#のgetHeightはここWebViewのプライベートメソッドの一つだ:

/* 
* Return the width of the view where the content of WebView should render 
* to. 
*/ 
private int getViewWidth() { 
    if (!isVerticalScrollBarEnabled() || mOverlayVerticalScrollbar) { 
     return getWidth(); 
    } else { 
     return getWidth() - getVerticalScrollbarWidth(); 
    } 
} 

アクティビティのレイアウトなどを割り当てた後、あなたがそれを測定していることを確認する必要がコメントで述べたようにsetContentView(R.layout.mylayout);

1

おそらくサイズがあまりにも早く、おそらくonCreateで確認していました。 loadDataまたはloadDataWithBaseURLを使用している場合onPageFinishedコールバックアプローチは動作しません

webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onPageFinished(WebView webView, String url) { 
       super.onPageFinished(webView, url); 
       Log.i(TAG, findViewById(R.id.my_component).getWidth();); 
      } 
     }); 
+0

このメソッドは機能しません。高さは常に0です。 – Chan

2

:代わりに、これを試してみてください。 JavaScriptを使用してAndromedevの別の解決策を見ましたが、これが最善の方法であるとは確信していません。

0

高さと幅の読み込み時間を取得したい場合、読み込み時間で取得できないため取得できません。私はwebview Toucheventを使用し、高さと幅を取得することをお勧めします。それ以外の場合は、別のビューのクリックイベントを使用して、高さと幅を取得します。

webView.getWidth(); 
webView.getHeight(); 

これを使用してください。

1

あなたはwebviewのサイズを早期に確認しています。 あなたはまだ闘争誰のための方法

@Override 
public void onWindowFocusChanged(boolean hasFocus) { 
    // TODO Auto-generated method stub 
    super.onWindowFocusChanged(hasFocus); 
      webView.getWidth(); 
      webView.getHeight(); 
} 
2

を以下でこれを試すことができます。 これらのメソッドを使用して、Webビューの高さと幅を取得します。

computeHorizontalScrollRange(); -> for width 
computeVerticalScrollRange(); -> for height 
+1

getWidth()とgetHeight()は、画面上のwebviewの実際のwidht/heightではなく、スクロール可能な幅/高さを返すので、 。 – aaronmarino

+0

また、これらのメソッドは保護されているため、たとえばカスタムレイアウト内から使用するのが難しい場合があります。 –

3

ここではよりエレガントな解決策は、私は同じ問題を抱えていた

public void onCreate(Bundle savedInstanceState) { 


     webView = (WebView) findViewById(R.id.webView1); 

     webView.addOnLayoutChangeListener(new OnLayoutChangeListener() { 

      @Override 
      public void onLayoutChange(View v, int left, int top, int right,int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { 
       int w= webView.getWidth(); 
       int h= webView.getHeight(); 


      } 
     }); 



    } 
0

です。私はちょうどinitWebViewメソッドをonWindowFocusChangedtに入れました。

public void onWindowFocusChanged(boolean hasFocus) { 
    super.onWindowFocusChanged(hasFocus); 
    initWebView(); 
} 


private void initWebView(){ 
    if(isOnline()){ 
     venueWebView = (WebView) findViewById(R.id.venueWebView); 
     String url = "some url"; 
     int viewWight = venueWebView.getWidth(); 
     int viewHeight = venueWebView.getHeight(); 
     venueWebView.loadUrl(url); 
    } 
0

私の回答が誰かに役立つことを願います。

コンテンツがロードされた後で、高さを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; 
       } 
     }); 
0

HTMLを読み込んだ後、WebView CONTENTSの幅と高さが必要です。 ありますが、getContentWidthメソッド(ビューポート値のみ)はありません。 とgetContentHeight()は不正確です!

回答:サブクラスのWebView:

/* 
    Jon Goodwin 
*/ 
package com.example.html2pdf;//your package 

import android.content.Context; 
import android.util.AttributeSet; 
import android.webkit.WebView; 

class CustomWebView extends WebView 
{ 
    public int rawContentWidth = 0;       //unneeded 
    public int rawContentHeight = 0;       //unneeded 
    Context mContext   = null;      //unneeded 

    public CustomWebView(Context context)      //unused constructor 
    { 
     super(context); 
     mContext = this.getContext(); 
    } 

    public CustomWebView(Context context, AttributeSet attrs) //inflate constructor 
    { 
     super(context,attrs); 
     mContext = context; 
    } 

    public int getContentWidth() 
    { 
     int ret = super.computeHorizontalScrollRange();//working after load of page 
     rawContentWidth = ret; 
     return ret; 
    } 

    public int getContentHeight() 
    { 
     int ret = super.computeVerticalScrollRange(); //working after load of page 
     rawContentHeight = ret; 
     return ret; 
    } 
//========= 
}//class 
//========= 
関連する問題