2010-08-31 11 views
27

J'ai un ScrollView personnalisé (étendu android.widget.ScrollView) que j'utilise dans ma mise en page. Je veux mesurer la hauteur totale du contenu de cette scrollview. getHeight() et getMeasuredHeight() ne me donnent pas les valeurs correctes (nombres trop élevés).Android: Hauteur totale de ScrollView

Informations de base: Je veux déterminer dans quelle mesure l'utilisateur a défilé. J'utilise onScrollChanged pour obtenir la valeur X, mais j'ai besoin de connaître un pourcentage, donc j'ai besoin de la hauteur totale de la barre de défilement.

Merci beaucoup! Erik

+0

Jetez un oeil à http://stackoverflow.com/questions/3513594/android-scrollview-setonscrolllistener-like-listview pour un soupçon – Mikpa

Répondre

73

Un ScrollView a toujours 1 enfant. Tout ce que vous devez faire est d'obtenir la hauteur de l'enfant afin de déterminer la hauteur totale:

int totalHeight = scrollView.getChildAt(0).getHeight(); 
+1

Mon vue enfant renvoie 0 même s'il défile. –

+2

Avez-vous demandé sa taille dans onCreate ou avant qu'il ait été mesuré? Essayez d'obtenir la hauteur plus tard, voir cette question: http://stackoverflow.com/questions/7733813/how-can-you-tell-when-a-layout-has-been-drawn – satur9nine

+0

Merci, cela a fonctionné :) –

0

Voir la source de ScrollView. Malheureusement, cette méthode est privée, mais vous pouvez la copier dans votre propre code. Notez que d'autres réponses ne prennent pas en compte padding

private int getScrollRange() { 
    int scrollRange = 0; 
    if (getChildCount() > 0) { 
     View child = getChildAt(0); 
     scrollRange = Math.max(0, 
       child.getHeight() - (getHeight() - mPaddingBottom - mPaddingTop)); 
    } 
    return scrollRange; 
}