2009-10-23 26 views
5

में वेबव्यू की चौड़ाई और ऊंचाई कैसे प्राप्त करें मैं WebView की चौड़ाई और ऊंचाई निर्धारित करना चाहता हूं। मैं पहले से ही उपयोग कर इसे की कोशिश की है:एंड्रॉइड

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

लेकिन इसके परिणाम स्वरूप लॉग हमेशा उन्हें पता चलता 0.

+1

आप अपने कोड पोस्ट कर सकते हैं? याद रखें कि आप OnCreate विधि में दृश्य की चौड़ाई और ऊंचाई प्राप्त नहीं कर सकते क्योंकि लेआउट अभी तक नहीं हुआ है। – Whaledawg

+0

मैंने अपना कोड यहां रखा है ऊंचाई = mainWebView.getHeight(); System.err.println ("कुल ऊंचाई प्रदर्शित करें ->" + mainWebView.getHeight()); System.err.println ("माप ऊंचाई ->" + mainWebView.getMeasuredHeight()); –

उत्तर

1

होने की हममम - मैं WevView स्रोत के माध्यम से देखा और मैं देख सकता हूँ कि आंतरिक रूप से वे दृश्य # getWidth और प्रयोग कर रहे हैं

/* 
* 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(); 
    } 
} 

टिप्पणी में बताया गया है क्या आप गतिविधि लेआउट जैसे आवंटित करने के बाद सुनिश्चित करें कि आप यह आकलन कर रहे हैं बनाने के लिए है: देखें # getHeight यहाँ WebView के निजी तरीकों में से एक है setContentView(R.layout.mylayout);

1

आप शायद onCreate में सबसे अधिक संभावनाओं की जांच कर रहे थे। जब loadData या loadDataWithBaseURL का उपयोग कर

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

onPageFinished कॉल बैक दृष्टिकोण काम नहीं करता है: इसके बजाय, इस प्रयास करें। मैंने जावास्क्रिप्ट का उपयोग करके Andromedev पर एक और समाधान देखा, लेकिन मुझे विश्वास नहीं है कि यह लेने का सबसे अच्छा तरीका है।

0

यदि आप ऊंचाई और चौड़ाई लोड समय प्राप्त करना चाहते हैं तो आप इसे प्राप्त नहीं कर सकते क्योंकि लोड समय इसे प्राप्त नहीं कर सकता है। मैं वेबव्यू टॉचेवेंट का उपयोग करने और ऊंचाई और चौड़ाई पाने का सुझाव देता हूं। अन्यथा एक और दृश्य का उपयोग करें घटना पर क्लिक करें और ऊंचाई और चौड़ाई प्राप्त करें।

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

इसका उपयोग करें।

1

आप वेबव्यू के आकार को बहुत जल्दी देख रहे हैं। आप विधि

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

निम्नलिखित किसी और को, जो अभी भी संघर्ष के लिए इस कोशिश कर सकते हैं। अपनी वेबदृश्य की ऊंचाई और चौड़ाई प्राप्त करने के लिए इन विधियों का उपयोग करें।

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

ध्यान दें कि ये getid() और getHeight() प्राप्त करने के लिए अलग-अलग मान वापस कर सकते हैं क्योंकि वे स्क्रीन पर वेबव्यू की वास्तविक चौड़ाई/ऊंचाई की बजाय पूरी स्क्रोल करने योग्य चौड़ाई/ऊंचाई लौटाते हैं । – 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पर विधि को विन्डोफोकस चेंजेट पर रखा है।

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

आपको अपना एचटीएमएल लोड करने के बाद वेबव्यू सामग्री की चौड़ाई और ऊंचाई की आवश्यकता है। हाँ आप करते हैं, लेकिन कोई 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 
//=========