ScrollView height

  • Hoi,


    hab n kleines Problemchen.


    Hab eine View, in der ein LinearLayout Vertical orientiert hängt. Dort hängt zum einen eine ScrollView, drunter eine TextView. Wenn ich jetzt die ScrollView nach unten scrolle und ganz unten an gekommen bin, will ich den Text in der TextView ändern.


    Hab mir dazu eine ObservableScrollView gemacht, die von ScrollView erbt und in der onScrollChanged mein Listener Interface aufruft. In meiner View habe ich das Interface implementiert, eingehängt und die onScrollChanged springt an, sobald ich scrolle. Nun, scrolle ich ganz runter, ist jetzt mein y-Wert 1737 als Beispiel, die ScrollView sagt mit getHeight, getBottom, getMeasuredHeight und was weiß ich mit was sonst noch, sie wär 713 Pixel hoch.


    Jetzt meine eigenltiche Frage, wie lese ich die insgesamte Höhe - also nicht nur die angezeigte sondern im Ganzen - einer ScrollView aus?



    Gruß,
    matze


    EDIT:
    Dacht mir dann rechne ich halt selber zam ... hat au nix geholfen -.-


    Java
    int scrollHeight = 0; 
    		for (int i = 0; i < scrollView.getChildCount(); i++) {
    			scrollHeight += scrollView.getChildAt(i).getHeight(); 
    		}


    ... liefert 2449, viel zu viel.

  • So wie ich die Dinger verstehe (und ich klaue hier aus meinem Verständnis für iOS, weil das ScrollView für Android mal bescheiden dokumentiert ist...) ist das ScrollView genau so groß wie du sagst: 713 in diesem Fall.


    Denn das ScrollView besteht im Allgemeinen aus einem Scroller und einem Content. Und innerhalb dieses Contents befinden sich die Views, die dann schlussendlich 'scrollen'.


    Du willst also nicht wissen, wie groß dein ScrollView ist, sondern wie groß die Subviews im Content sind.


    Leider hab ich keinen Plan, wie man da am Simpelsten ran kommt.


    Ansätze wären:
    • durch die Subviews iterieren (wie auch immer...) und mit measureChild(View child, int parentWidthMeasureSpec, int parentHeightMeasureSpec) arbeiten
    • durch die Subviews iterieren (selbes Problem wie oben) und deren Höhenwerte aufaddieren
    • via getMaxScrollAmount() herausfinden, wie groß der maximal erreichbare Scrollwert ist und mit dem aktuellen Wert vergleichen


    Für dein Vorhaben scheint der letzte Punkt der passendste zu sein. Wenn der aktuelle Scrollwert (größer)gleich dem maximalen Scrollwert ist, wird wohl das Ende erreicht worden sein. ;)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hoi,


    in der Theorie klingt das alles ganz schnuffig, in der Praxis liefert getMaxScrollAmount einen ziemlichen bockmist :(


    Hätte auch schon versucht die getHeight bzw getBottom mit der getMaxScrollAmount zu addieren, jedoch hab ich bisher nichts sinnvolles gefunden, das mir die passenden Werte liefert und universal funktioniert, die Texte sind ja schließlich unterschiedlich lang.


    Als kurzfristige "Lösung" lass ich es jetzt erstmal so, bei dem einen Text passt es genau, beim anderen ändert sich der Text ungefähr ab hälfte. Es geht an sich um einen "mehr" Text, der signalisieren soll "hey, scroll runter, hier is noch was" ... wenn er mal paar Zeilen gescrollt hat, weiß er ja, dass er scrollen kann. Dann wird er den Rest schon finden, ist ja schließlich Lauftext, müsst er schon merken, dass der nicht mitten im Satz endet xD


    Perspektivisch müsste es da aber doch irgend ne Lösung geben müssen ... die ScrollView muss doch selbst auch irgendwie wissen, wann sie ganz unten ist. Sonst würd ja da unten die Animation nich funktionieren und der Scrollbalken au nicht stimmen.


    EDIT:
    getMasScrollAmount liefert 349, ich überleg grad, in welchem Zusammenhang das stehen könnte ...

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!