1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

LinearView/ViewGroup erweitern. wie geht das?

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von DieGoldeneMitte, 05.02.2010.

  1. DieGoldeneMitte, 05.02.2010 #1
    DieGoldeneMitte

    DieGoldeneMitte Threadstarter Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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

    Beiträge:
    8,270
    Erhaltene Danke:
    4,795
    Registriert seit:
    12.12.2009
    Danke, dass du es hier noch gepostet hast!
     
  4. DieGoldeneMitte, 05.03.2010 #4
    DieGoldeneMitte

    DieGoldeneMitte Threadstarter Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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:

Diese Seite empfehlen