GridView: height parameter in onMeasure fehlt?

  • Moin,


    ich verzweifel hier gerade an einer Kleinigkeit.
    Beim Bauen und testen eines neuen Layouts war ich mit dem Ergebnis ganz zufrieden, bis ich das Layout in einen GridView gepackt habe.


    Hier wird mir in der onMeasure() eine komplett sinn- und inhaltlose heightMeasureSpec übergeben. (Höhe: 0, Typ: UNKNOWN)
    Das zerschießt mir natürlich das komplette Layout.
    Kennt das jemand und hat sich da schon erfolgreich gegen wehren können?

    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!«

  • Hi,
    was ist das denn für ein Layout-Typ?
    Kann mir nur vorstellen, dass damit etwas im argen ist.


    Selbst hatte ich aber ein solches Problem noch nie :(

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Wie viele GridViews hast Du erstellt, bei deren Subviews Du die OnMeasure überschrieben hast?


    Ein GridView ist (wie der Name schon sagt) ein View, kein Layout.


    Code
    java.lang.Object
       ↳	android.view.View
     	   ↳	android.view.ViewGroup
     	 	   ↳	android.widget.AdapterView<T extends android.widget.Adapter>
     	 	 	   ↳	android.widget.AbsListView
     	 	 	 	   ↳	android.widget.GridView


    Selbst Überschreiben war nur bedingt erfolgreich, da zwar einmal meinen manuellen Measure-Werte an die Subviews weitergegeben wurden, onMeasure aber mehrfach aufgerufen wird und entsprechend n-1 mal mit einer MeasureSpec von 0 als Höhenwert aufgerufen wird.


    Ich versuche dann als Nächstes mal das GridLayout.

    Code
    java.lang.Object
       ↳	android.view.View
     	   ↳	android.view.ViewGroup
     	 	   ↳	android.widget.GridLayout

    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!«

  • Ich hab in hier noch was gefunden:
    http://arpitonline.com/blog/20…stom-layouts-for-android/
    "This is because the child layouts have no idea till that time how they should lay out their own children since they haven’t been measured at all and return a measured width and height of 0. To do a layout correctly, you need to make sure that you also override the onMeasure method in your layout and call the measure method on each of your children appropriately."


    Behandelt zwar CustomViews, aber vll. klappt es ja.
    Hast du ansonsten in onMeasure noch die super Methode drin? Denn die ruft wohl auch nur setMeasuredDimension auf.


    Mit GridView hab ich zwar schon gearbeitet, onMeasure hab ich aber nicht überschrieben.

    MfG,
    Christopher


    Eine gewisses Maß an Freundlichkeit kann man auch von Menschen im Internet erwarten.
    Das Forum basiert komplett auf der Freiwilligkeit ihrer Nutzer und diese sollen sich wohlfühlen! Daher seid bitte freundlich. Danke

  • Tja, was soll ich sagen? Irgendwas haut mir die Informationen wieder durcheinander:



    Um ein super.onMeasure() komme ich in der direkten Subklasse nicht herum. Wenn ich es weglasse, hagelt es eine NullPointerException in den Tiefen des GridViews.

    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!«

  • Ich verzweifle grad mal wieder hieran.
    Ursprünglich habe ich einfach die 0 Werte ignoriert, auf sinnvolle Werte gewartet und bin dann erst das Layout durchgegangen.


    Nun habe ich aber das Problem, dass beim Wechsel vom Landscape in den Portrait Modus für einige Elemente onMeasure() nur ein einziges mal mit den unsinnigen Werten aufgerufen wird. Meine aktuelle Implementierung nutzt dann natürlich den letzten bekannten Wert, also die Höhe aus dem Landscape Modus.


    Und die ist für den Portrait Modus natürlich um Längen zu niedrig. +seufz+


    Dabei will ich doch nur fullscreen und möglichst ohne eigenen Aufwand je nach Modus 2x6 bzw. 3x4 Views darstellen.
    Offenbar ist GridView da aber doch das völlig falsche Element für.


    Ich versuche es mal mit dem Dashboard Layout

    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!«

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!