Zeilenumbruch in einer for schleife

  • 19 Antworten
  • Letztes Antwortdatum
C

coreytaylor211

Fortgeschrittenes Mitglied
5
Hallo liebe android-Hilfe user,

Ich habe das Problem das ich nicht weiß wie ich ein Zeilenumbruch in die Schleife einbauen kann.
Hier mal der Code
Code:
    public void setressource(){
        ib = new ImageButton[11];
        int a =11,b =0;
        while (a>b){

            for(int j=0;j<5;j++) {
                ib[j] = new ImageButton(activity_test.this);
                ib[j].setMaxWidth(120);
                ib[j].setMaxHeight(120);
                ib[j].setImageResource(R.mipmap.ic_launcher);
                III.addView(ib[j]);
            }
            b++;
        }
    }
momentan werden hier nur 5 ImageButton in einer reihe angezeigt. Ich möchte aber das nach den 5 ImageButton ein Zeilenumbruch gemacht wird und die restlichen ImageButton auch angezeigt werden.

Vielen Dank
 
Hat keiner eine Idee ? oder fehlen euch noch Informationen ?
Oder kann ich sowas nur mit einer Grid View realisieren ?

Noch ein kleiner Nachtrag :
Wenn ich das layout in eine Scrollview verpacke, werden alle angezeigt.
Aber halt immer nur in einer Reihe.
 
Zuletzt bearbeitet:
Am einfachste lässt sich Dein Problem mit einem GridView realisieren. Eine andere Möglichkeit wäre es, jeweils 5 ImageButton in eine Zeile einzufügen (2 Schleifen).
 
  • Danke
Reaktionen: coreytaylor211
Oder in deinem Linearlayout würde ich folgenden Trick anwenden: Die Breite des Viewcontainers berechnen(bei Vollbild natürlich dann die Breite des Displays) in dem dein Layout steckt und dann jedem Button ein 5tel dieser Breite selbst als Breite mitgeben. So zwingst du das linlay eifnach eine nächste Spalte anfangen zu müssen ;)
 
  • Danke
Reaktionen: coreytaylor211
Also ich würde auch mit LinearLayout arbeiten und dabei gar nichts berechnen, sondern bei Modulo 5 ein neues horizontal LinearLayout erstellen (oder am besten Inflaten) und dort die neuen ImageViews hinzufügen.

Beim Inflaten kann man noch gut die weightSum festlegen etc.
 
  • Danke
Reaktionen: coreytaylor211
Jaiel schrieb:
Oder in deinem Linearlayout würde ich folgenden Trick anwenden: Die Breite des Viewcontainers berechnen(bei Vollbild natürlich dann die Breite des Displays) in dem dein Layout steckt und dann jedem Button ein 5tel dieser Breite selbst als Breite mitgeben. So zwingst du das linlay eifnach eine nächste Spalte anfangen zu müssen ;)

Oder man benutzt ein GridLayout. Man muss nicht immer das Rad neu erfinden. :)
 
  • Danke
Reaktionen: coreytaylor211
Jaiel schrieb:
Oder in deinem Linearlayout würde ich folgenden Trick anwenden: Die Breite des Viewcontainers berechnen(bei Vollbild natürlich dann die Breite des Displays) in dem dein Layout steckt und dann jedem Button ein 5tel dieser Breite selbst als Breite mitgeben. So zwingst du das linlay eifnach eine nächste Spalte anfangen zu müssen ;)
Also ich habe das jetzt mal ausprobiert was du gesagt hast, aber das geht irgendwie auch nicht.
Immer noch das gleich Ergebnis.
Hier mal der Code
Code:
   public void setressource(){
        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);
        int height = dm.heightPixels;
        int width = dm.widthPixels;
        int new_width = width/5;
        ib = new ImageButton[11];
        int a =11,b =0;
        while (a>b){

            for(int j=0;j<1;j++) {
                ib[j] = new ImageButton(activity_test.this);
                ib[j].setMaxWidth(new_width);
                ib[j].setMaxHeight(120);
                ib[j].setImageResource(R.mipmap.ic_launcher);
                eins.addView(ib[j]);
            }

            b++;
        }
    }
Hab ich das jetzt noch einen Denkfehler ?
 
Zuletzt bearbeitet:
Mal ne ganz doofe Frage: Wieso durchläufst die die Schleife, die die 11 Buttons anlegen soll, 11 mal?
 
  • Danke
Reaktionen: coreytaylor211
Tippfehler :) eine 1 zu viel, aber das ändert ja nix an dem Problem ;)
 
So ergibt das aber noch weniger Sinn... jetzt überschreibst du ja immer den gerade angelegten Button beim nächsten Durchlauf.

Lass die While-Schleife einfach weg und zähl mit der For-Schleife von 0 bis 10.
 
  • Danke
Reaktionen: coreytaylor211
Ok Danke für den tipp, hättest du auch einen Tipp wie das das Problem lösen kann dass eine neue Zeile angefangen wird ?
 
Es ist schon alles richtig, nur machst du keinen Zeilenumbruch. Stattdessen fügst du einfach rechts Views an, die nicht mehr dargestellt werden (weil das Display nicht breit genug ist).
Warum einfach, wenn es auch kompliziert geht? ;) Benutze bitte einfach ein GridLayout.
 
  • Danke
Reaktionen: coreytaylor211
Ja das mit dem GridLayout habe ich doch schon ausprobiert hat aber genau den gleich Effekt.
 
Hey ich hab gesehen dass du meine MEthode mal getestet hast und wollte nur sagen dass du setWidth benutzen solltest statt nur maxwidth anzugeben dann würde es klappen...
 
  • Danke
Reaktionen: coreytaylor211
Wo meinst du genau das ich setWidth angeben soll ? weil in der schleife wird es nicht erkannt.
 
JA sorry habe es verwechselt. Ich habe meine eigenen Wrapper drum herum deswegen bin ich auf setWidth() gekommen :D
Dazu muss du einfach die Layoutparams verwenden und über diese width und height setzen:

Code:
ib[j].setLayoutParams(new LinearLayout.LayoutParams(width,height));

So sollte es klappen. Hier für nöhere Infos was du da als height und width angeben kannst ViewGroup.LayoutParams | Android Developers
 
Zuletzt bearbeitet:
Ahh Danke werde ich nachher mal ausprobieren.
Ich berichte dir dann.
 
Jaiel schrieb:
JA sorry habe es verwechselt. Ich habe meine eigenen Wrapper drum herum deswegen bin ich auf setWidth() gekommen :D
Dazu muss du einfach die Layoutparams verwenden und über diese width und height setzen:

Code:
ib[j].setLayoutParams(new LinearLayout.LayoutParams(width,height));

So sollte es klappen. Hier für nöhere Infos was du da als height und width angeben kannst ViewGroup.LayoutParams | Android Developers
Ok ich habe es ausprobiert, allerdings betrifft das nur das Layout und nicht den ImageButton. Und es ist immernoch in der Zeile leider.

Wenn du Vorschläge hast immer her damit oder wäre es wirklich einfacher ein GridLayout zu nehmen ?
 
JA NAtürlich nimm das Gridlayout anstatt zu tricksen
 
Zurück
Oben Unten