layout_weight auch dynamisch?

  • Hallo,
    da mir beim letzten Mal so schnell geholfen wurde, würde ich gern noch ein Problemchen posten...


    Und zwar habe ich eine dynamische Tabelle.
    Die erste Zeile wird noch im main-Layout erzeugt und die Inhalte entsprechend mit layout_weight="1" versehen, damit die Verteilung gleichmässig ist.
    Die anderen Zeilen werden allerdings erst zur Laufzeit erzeugt und ich finde einfach keine passende Methode, um die nächsten Zeilen genauso zu erstellen - da muss es doch ein Pendant zum xmlschen weight geben?
    Die Breite mit getWidth() aus einem Element der ersten Zeile zu bekommen will auch nicht funktionieren- der Wert ist 0...
    Evtl weil es keinen vorher festgelegeten Wert gibt?


    Wär schön, wenn mir nochmal jemand helfen könnte!


    Grüße,
    Kaschina

  • Warum setzt du den Inhalt deiner ersten Tabellenzeile auf weight=1 ???


    Der Inhalt einer Tabellenzeile sollte doch immer "wrap_content" sein, damit du den ganzen Inhalt siehst.
    Falls die Tabelle länger/größer wird solltest du das gesamte Tabellenkonstrukt noch in einen ScrollView packen.

  • Ich habs wohl nicht so mit genau ausdrücken :)
    Die Zeile selbst ist natürlich so, wie du gesagt hast und das TableLayout steckt in einem ScrollView.
    In der ersten Zeile sind noch 5 Textfelder, die alle gleich breit sein sollen => also jeweils weight = 1.
    Und genau das würde ich mit den nachfolgenden dynamisch erzeugten Zeilen machen.
    Also ich will nicht die Zeilen mit weight=1 belegen, sondern den Inhalt der Zeilen.

  • Hmm denk denk


    also deine Textfelder stecken in 5 Spalten oder in 1 Spalte ???


    Normalerweise kannst du ja bei Textfelder/Button auch ein Fill_Parent vergeben dann hast du in deinem Fall den selben Effekt wie layout_weight=1.
    Die würden sich dann an die Breite deiner Tabellenspalten anpassen.
    Per Layoutparameter kannst du auch der Tabelle mit teilen, welche Spalten shrinkable seien sollen.

  • Da waren sie, die vielen Schläuche zum Draufsetzen :D
    strechColumns="*" hat das Problem gelöst...


    Aber zwecks Verständnis und so...
    Du hast gefragt, ob ich pro Spalte 5 Textfelder hatte;
    ich dachte, es geht nur ein Element pro Zelle? Wenn ich mehr haben wollen würde, müsste ich das alles in ein Layout packen und dann in die Zelle?

  • Genau , du kannst ein Linearlayout zusammenbauen (zb mit 5 Textfeldern) und dieses wieder in eine Tabellenspalte packen.


    Ich habe nur gefragt um für mich selbst ein besseres Bild zu haben, was du überhaupt vorhast.
    Die Layoutparameter kannst du aber auch zur Laufzeit setzen. siehe Code.





    Java
    if(tabelle != null && tabelle.size() > 0){			 	
           		TableLayout tl = (TableLayout) findViewById(R.id.tableLayout1);
           		tl.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
           		tl.setColumnStretchable(1, true);
           		tl.setColumnShrinkable(1, true);
         	
           		// Header zeichnen - 1.Zeile
          		TableRow trh = new TableRow(context);
          		trh.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
          		trh.setBackgroundColor(Color.rgb(230,230,230));

Jetzt mitmachen!

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