LinearLayouts dynamisch untereinander

  • Antworten:12
  • Bentwortet
Maximilian O
  • Forum-Beiträge: 990

28.04.2011, 14:42:27 via Website

Hallo Leute,
ich möchte gerne in mein RelativeLayout dynamisch LinearLayouts untereinander anordnen.
1RelativeLayout container = (RelativeLayout) findViewById(R.id.analysis);
2
3 LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
4 View view = inflater.inflate(R.layout.analysis_item, null);
5
6 //view.setLayoutParams(layout_)
7 container.addView(view);
Beim 1. klappt alles wunderbar. Aber wen es mehrere gibt werden diese nicht untereinander angezeigt. Ist es möglich sie ohne eine ListView untereinander anzuordnen?
MfG Maximilian

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Stefan S.
  • Forum-Beiträge: 560

28.04.2011, 14:53:45 via Website

Ev mit layout_below auf den einzelnen LinerLayouts?

Antworten
Maximilian O
  • Forum-Beiträge: 990

28.04.2011, 15:09:04 via Website

Habe ich auch gedacht. Nur scheitere ich daran das below dynamisch zu setzen.
1for(int i = 0; i<4; i++)
2 {
3 LayoutInflater inflater = LayoutInflater.from(getApplicationContext());
4 View view = inflater.inflate(R.layout.analysis_item, null);
5 LinearLayout row = (LinearLayout) view.findViewById(R.id.row);
6 row.setId(i);
7 if(i != 0)
8 {
9 row.setLayoutParams(????)
10 }
11 }

Ich habe schon gegoogelt, aber nichts gefunden. Wie setzte ich die parameter dynamisch?
MfG

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

28.04.2011, 20:13:59 via Website

Wenn du konstant 4 Stück von den Dingern benötigst, warum formulierst du das dann nicht direkt im .xml Layout (die überzähligen Kandidaten könntest du dann ggf einfach verstecken)?

Antworten
Maximilian O
  • Forum-Beiträge: 990

28.04.2011, 20:31:15 via Website

Ist schon ne Idee, aber es kommt immer darauf an, welcher Modi eingestellt ist. Von daher müsste man jedem auch ne Id und nen Content geben. Also wäre es schon gut wenn ich sie dynamisch erstelle, trotzdem danke.
MfG

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Maximilian O
  • Forum-Beiträge: 990

29.04.2011, 15:04:06 via Website

Danke, das ist eine tolle Idee, nur kann man dieses addRule nur auf einem RelativeLayout aufrufen. Aber ich möchte das Attribut ja meinem Linear Layout geben.
Ich verstehe nicht warum es so schwer sein muss einfach nen xml style in java zu adden.
MfG

— geändert am 29.04.2011, 15:10:16

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Maximilian O
  • Forum-Beiträge: 990

30.04.2011, 10:09:51 via Website

Dankeschön für das Beispiel. Es klappt jetzt wunderbar, bis auf eine Kleinigkeit:
Ich sage ja, wenn ich die layoutParameter hinzufüge folgendes:
1lp.addRule(RelativeLayout.BELOW, rowIds.get(i));

rowIds ist eine ArrayList<Integer>, in welcher ich mir die Id's der einzelnen Reihen speichere. So weit so gut, doch leider ist das immer dieselbe Id, ist ja verständlich, da es immer dieselbe Ausgangsposition ist, welches ich inflate, doch brauche ich doch um den oben gezeigten Code auszuführen ja eine eindeutige id.
Habt ihr eine idee?
MfG

//EDIT: Hab mich nur verguckt, passt doch alles. Danke nochmal!

— geändert am 30.04.2011, 10:19:26

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

30.04.2011, 11:38:00 via Website

passt doch alles

Prima :)
Kommt mir zwar nach wie vor umständlich vor (gemessen an Alternativen wie TableLayout, ListView, LinearLayout mit Orientation vertical als Parent, und natürlich der einfachsten Lösung, das ganze direkt in .xml zu machen), aber ich weiß ja nicht was es werden soll, also kann ich mich irren ;)

Antworten
Maximilian O
  • Forum-Beiträge: 990

30.04.2011, 11:41:13 via Website

Ich finde es so eine tolle Lösung. Ich schick dir die App wense fertig is :)

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Maximilian O
  • Forum-Beiträge: 990

01.05.2011, 10:58:42 via Website

Es läuft zwar alles, aber komischerweise wird das erste Layout was angefügt wird nicht angezeigt. Klar, es gibt ja noch kein Layout unter welches es hinzugefügt werden soll, daher habe ich einen 1dip hohen Streifen hinzugefügt und ihn für das 1. Layout als layout below hinzugefügt.


Das gibts doch nicht, was kann ich machen, damit es angezeigt wird?

1rowIds.add(R.id.place_holder);
2
3lp.addRule(RelativeLayout.BELOW, rowIds.get(i));

Der Placeholder ist der 1dip hohe Streifen. Wenn nun das erste Layout geaddet wird, bekommt es ja als LayoutBelow den Placeholder.
Was komisch ist, das ine Layout was fehlt, die 1. leigt unter dem 2. aber warum?
Habt ihr ne Idee?
MfG

— geändert am 01.05.2011, 11:03:32

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten
Maximilian O
  • Forum-Beiträge: 990

01.05.2011, 18:41:47 via Website

So, habs gelöst. Wusstet ihr das man keinem View die ID 0 geben darf?
Wenn ich aber statt .....setId(i) einfach sage ...setId(i + 1000) funktioniert alles. So jetzt passt aber wirklich alles. Vielen Dank nochmal an alle!

Vergiss nie wieder Geburtstage, oder viel schlimmer, deinen Hochzeitstag - Birthdays Download

Antworten