2010-08-31 2 views
27

У меня есть собственный ScrollView (расширенный android.widget.ScrollView), который я использую в своем макете. Я хочу измерить общую высоту содержимого этого прокрутки. getHeight() и getMeasuredHeight() не дают мне правильных значений (слишком высокие числа).Android: Общая высота ScrollView

Фоновая информация: Я хочу определить, насколько далеко прокручивается пользователь. Я использую onScrollChanged для получения значения X, но мне нужно знать процент, поэтому мне понадобится полная высота полосы прокрутки.

Большое спасибо! Erik

+0

Посмотрите на http://stackoverflow.com/questions/3513594/android-scrollview-setonscrolllistener-like-listview для намека – Mikpa

ответ

73

ScrollView всегда имеет 1 ребенка. Все, что вам нужно сделать, это получить высоту ребенка, чтобы определить общую высоту:

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

моего взгляда ребенка возвращает 0, даже если он прокручивается. –

+2

Вы просили его высоту в onCreate или до того, как он был измерен? Попытайтесь получить высоту позже, посмотрите на этот вопрос: http://stackoverflow.com/questions/7733813/how-can-you-tell-when-a-layout-has-been-drawn – satur9nine

+0

Спасибо, что сработало :) –

0

См источник ScrollView. К сожалению, этот метод является закрытым, но вы можете скопировать его в свой собственный код. Обратите внимание, что другие ответы не принимают во внимание отступов

private int getScrollRange() { 
    int scrollRange = 0; 
    if (getChildCount() > 0) { 
     View child = getChildAt(0); 
     scrollRange = Math.max(0, 
       child.getHeight() - (getHeight() - mPaddingBottom - mPaddingTop)); 
    } 
    return scrollRange; 
} 
Смежные вопросы