2010-08-31 17 views
27

Ich habe eine benutzerdefinierte ScrollView (erweiterte android.widget.ScrollView), die ich in meinem Layout verwenden. Ich möchte die Gesamthöhe des Inhalts dieser Scrollview messen. getHeight() und getMeasuredHeight() geben mir keine korrekten Werte (zu hohe Zahlen).Android: Gesamthöhe von ScrollView

Hintergrundinformationen: Ich möchte feststellen, wie weit der Benutzer gescrollt hat. Ich benutze onScrollChanged, um den X-Wert zu erhalten, aber ich muss einen Prozentsatz wissen, deshalb brauche ich die gesamte Höhe der Bildlaufleiste.

Vielen Dank! Erik

+0

Werfen Sie einen Blick auf http://stackoverflow.com/questions/3513594/android-scrollview-setonscrolllistener-like-listview um einen entsprechenden Hinweis – Mikpa

Antwort

73

Ein ScrollView hat immer 1 Kind. Alles, was Sie tun müssen, ist die Höhe des Kindes erhalten die Gesamthöhe zu bestimmen:

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

Mein Kind Blick gibt 0 zurück, obwohl es scrollt. –

+2

Haben Sie in onCreate nach der Höhe gefragt oder bevor es gemessen wurde? Versuchen Sie, die Höhe später zu bekommen, siehe diese Frage: http://StackOverflow.com/Questions/7733813/How-Can-You-Tell-When-Alayout-Has-been-drawn – satur9nine

+0

Vielen Dank, das hat funktioniert :) –

0

die Quelle der Scroll See. Leider ist diese Methode privat, aber Sie könnten sie in Ihren eigenen Code kopieren. Beachten Sie, dass andere Antworten nicht nehmen padding Rechnung

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