2016-03-29 9 views
6

Sto cercando di applicare ampliare funzione crollo sul Webview Sulla base della sua altezza contenuti ma sto ottenendo sempre un valore errato Ecco il mio codiceOttenere WebView altezza contenuti una volta la sua carica 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; 
    } 
} 

e poi in il frammento Ho cercato di ottenere l'altezza contenuti

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; 

ma il mio problema è che sto ottenendo sempre risultato sbagliato Grazie

+0

Può spiegare perché ContentListener deve essere all'interno di una corsa? Non possiamo ottenere un valore preciso se semplicemente impostiamo l'ascoltatore senza di esso? – Teffi

risposta

15

Utilizzare i seguenti metodi invece di getContentHeight() metodo:

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

questi due metodi restituirà l'intera larghezza/altezza scorrevole piuttosto che il widht/altezza reale del WebView sullo schermo

+3

Grazie amico, funziona come un fascino – Tony

+0

Grazie mille, ottima risposta! – dees91

+0

Usalo con la combinazione di onScrolledSchanged() ti offre un modo più efficiente di gestire in alto, in basso. – Abhishek