2016-03-29 15 views
6

Próbuję zastosować poszerzyć funkcję zwijania na Webview podstawie jego wysokości partnerskiej, ale zawsze jestem coraz błędną wartość Oto mój kodPierwsze WebView wysokość jego zawartość raz załadowany Android

public class MesuredHeightWebView extends WebView { 
    public MesuredHeightWebView(Context context) { 
     super(context); 
    } 

    public MesuredHeightWebView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
    } 

    public MesuredHeightWebView(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
    } 



    @Override 
    public void invalidate() { 
     super.invalidate(); 

     if (getContentHeight() > 0) { 
      // WebView has displayed some content and is scrollable. 
      if(listener!=null) 
       listener.updateContentHeight(getContentHeight()); 
     } 
    } 



    WebViewContentHeight listener; 

    public void setChangeContentListener(WebViewContentHeight listener) { 
     this.listener = listener; 
    } 
} 

, a następnie w fragment próbowałem uzyskać wysokość treści

webView.setWebChromeClient(new WebChromeClient(){ 
     @Override 
     public void onProgressChanged(WebView view, int newProgress) { 

      super.onProgressChanged(view, newProgress); 
      if(newProgress==100) 
      { 
       new Handler().postDelayed(new Runnable() { 
        @Override 
        public void run() { 
         webView.setChangeContentListener(new WebViewContentHeight() { 
          @Override 
          public void updateContentHeight(int height) { 

           if(height>0 && getActivity()!=null) { 

            System.out.println("the height2 is" + height + " " + Utils.convertPixelsToDp(height, getActivity())); 
            final int text_height = height; 

ale moim problemem jest to, że zawsze jestem coraz błędnego Wynik Dzięki

+0

można wyjaśnić dlaczego ContentListener musi być w ramach działającego? Czy nie możemy uzyskać dokładnej wartości, jeśli po prostu ustawimy słuchacza bez niej? – Teffi

Odpowiedz

15

Poniższe metody zamiast getContentHeight() metody:

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

te dwie metody zwróci całą przewijalną szerokość/wysokość, a nie rzeczywistą szer/wysokość WebView na ekranie

+3

Dzięki człowiekowi, działa jak Urok – Tony

+0

Wielkie dzięki, świetna odpowiedź! – dees91

+0

Używanie go z kombinacją onScrolledSchanged() zapewnia bardziej efektywny sposób obsługi górnej, dolnej. – Abhishek