1. Nimm jetzt an unserem AGM - Gewinnspiel teil - Informationen zum M1, A2 und A8 findest Du hier, hier und hier!
  1. DieGoldeneMitte, 05.02.2010 #1
    DieGoldeneMitte

    DieGoldeneMitte Threadstarter Android-Lexikon

    Hallo Forum,

    ich bastel gerade an meinem ersten Android Programm, dabei habe ich festgestellt, dass ich mit den vorhandenen Layouts nicht zufrieden bin.

    Ich will deshalb einen eigenen View schreiben. Mein erster Versuch soll ein LinearView sein, der alle Kinder gleich breit rendert (ich weiß, dass es layout_weight gibt, aber ich will ja was lernen :)).

    Im Gegensatz zum java.awt (da war das in 5min geschrieben) habe ich massive Schwierigkeiten. Mein View nimmt nur den Platz ein, malt aber nichts. Kann mir jemand sagen, wo bei mir der Denkfehler ist?

    Der Code sieht im Wesentlichen so aus, die Views sind aller per xml definiert:
    Code:
        @Override
        protected void onLayout( boolean changed, int l, int t, int r, int b ) {
            int len = getChildCount();
            int w = ((r-l)-(len-1)*PADDING)/len;
            int pos = l;
            for( int i=0; i<len; i++ ) {
                View c = getChildAt(i);
                c.layout( pos, t, pos+w, b );
                pos += w + PADDING;
            }
        }
        
        @Override 
        protected void onMeasure( int wSpec, int hSpec ) {
            int w = MeasureSpec.getSize(wSpec);
            int len = getChildCount();
            int w1 = (w-(len-1)*PADDING)/len;
            for( int i=0; i<len; i++ ) {
                View c = getChildAt(i);
                measureChild(c, resolveSize(w1,wSpec), hSpec);
            }
            setMeasuredDimension(resolveSize(w, wSpec),hSpec);
        }
    
     
  2. DieGoldeneMitte, 18.02.2010 #2
    DieGoldeneMitte

    DieGoldeneMitte Threadstarter Android-Lexikon

    Nun habe ich selbst die Antwort auf mein Problem gefunden.

    Ich hatte nicht beachtet, dass bei "layout()" die Koordinaten relativ zum Parent übergeben werden müssen. (Steht auch so in der Doku)
     
  3. garak, 18.02.2010 #3
    garak

    garak Ehrenmitglied

    Danke, dass du es hier noch gepostet hast!
     
  4. DieGoldeneMitte, 05.03.2010 #4
    DieGoldeneMitte

    DieGoldeneMitte Threadstarter Android-Lexikon

    Aus der Lösung meines Problems habe ich ein kleines Paket gebastelt, mit dem man (relativ) komfortabel freiere Tabellen gestalten kann, als es mit TableView möglich ist. Ich schmeiße das Programm einfach mal in den Ring, vielleicht kann es außer mir auch noch jemand anderes gebrauchen.

    Have fun!
     

    Anhänge: