Button in RelativeLayout Container mittig zentrieren (kein XML!)?

flyMASTER

flyMASTER

Neues Mitglied
0
Guten Abend euch allen,

ich habe erst vir kurzem damit begonnen für Android zu programmieren und stolpere deshalb noch über das ein oder andere Verständnisproblem.


Ich will meine GUI zum Teil nicht auf Basis der XML Files erstellen sondern zur Laufzeit generieren. Als Container habe ich mir ein „RelativeLayout“ ausgesucht, da ich damit im XML Layout Editor die besten Erfahrungen gesammelt habe.
Zu diesem RelativeLayout Container wollte ich dann eine je nach Anwendungssituation unterschiedliche Anzahl an Buttons (an unterschiedlichen Stellen) im RelativeLayout Container/View positionieren, aber mir will das nicht so recht gelingen...
Die XML Parameter android:layout_centerVertical und android:layout_centerHorizontal würde ich gerne setzen bzw. eine vergleichbare Funktion nutzen, aber ich finde einfach keine?!


Ähnliche Probleme habe bei der Positionierung eines Objekts an einer bestimmten XY Koordinate, sowie das Benutzen der relativen Breite des Containers (in diesem Fall besitzt er die absolut mögliche Breite des Displays) um z.B. einen Button über das gesamte Display zu strecken.


Sind diese Dinge überhaupt möglich und wenn ja, wie? Wo liegt mein Denkfehler? Wenn man im Internet sucht findet man immer nur Lösungen über den XML weg. Der ist für mich aber ausgeschlossen, da ich vor dem starten des Programms noch nicht weiß wann und wie viele z.B. Buttons wo auf dem Display zu positionieren sind.


Ich freue mich über jede Hilfe :)
 
Code:
RelativeLayout. LayoutParams p = relativeLayoutView.generateDefaultLayoutParams();
// oder komplett selbst: RelativeLayout. LayoutParams = new RelativeLayout.Params();

p.width = RelativeLayout.LayoutParams.WRAP_CONTENT;
p.gravity = ...
childView.setLayoutParams(p);

Jedes Layout hat eine eigene LayoutParams Klasse, und alle Kind-Views verwenden jeweils die entsprechende LayoutParams des Eltern-Views.
 
Zuletzt bearbeitet:
Vielen Dank für den Hinweis -> habe nun auch eine Lösung gefunden.

Code:
//"this" ist eine Klasse die von der Klasse RelativeLayout erbt

this.startButton = new Button(this.getContext());
this.startButton.setText("Text");

RelativeLayout.LayoutParams tmpLp = (LayoutParams) this.generateDefaultLayoutParams();
 tmpLp.addRule(RelativeLayout.CENTER_IN_PARENT);
 tmpLp.width = RelativeLayout.LayoutParams.FILL_PARENT;
        
 this.startButton.setLayoutParams(tmpLp);
Was mich etwas irritiert hat ist der Cast bei " (LayoutParams) this.generateDefaultLayoutParams();"... geht das auch eleganter?
 
flyMASTER schrieb:
Was mich etwas irritiert hat ist der Cast bei " (LayoutParams) this.generateDefaultLayoutParams();"... geht das auch eleganter?

Seltsam - anscheinend ist der Rückgabewert von LinearLayout.generateDefaultLayoutParams() als ViewGroup.LayoutParams definiert.

Komischerweise mache ich das selbe mit FrameLayout, wo es ohne Cast klappt - dort wird nämlich direkt auch ein FrameLayout.LayoutParams zurückgegeben. Vielleicht wurde da was übersehen.
 
Hmm naja, so funktionierts ja erstmal.

Ich hänge aber schon am nächsten Problem:

Ich will ein Array von Strings an einen ArrayAdapter übergeben und diesen ArrayAdapter an einen Spinner anbinden.


PHP:
this.memorySet = new Spinner(contentView.getContext());
                
String[] s = {"A","A","A"};
        
ArrayAdapter<String> aa = new ArrayAdapter<String>(this.getContext(),this.memorySet.getId(),s);

this.memorySet.setAdapter(aa);
Leider stürzt der Emulator beim ausführe ab...

Ich vermute das ich noch aa.setDropDownViewResource(resource) ausführen muss, aber ich habe keine id für die resource denn der Spinner und auch das String[] werden zur Laufzeit generiert und existieren in keinem XML File...

Generell: Kann man passende XML Datensätze zur Laufzeit generieren? Irgendwie muss das doch auch ohne gehen, wie soll man sonst dynamische Inhalte programmiere deren GUI Elemente nicht vorraussagbar sind?
 
Okay, mein Posting war wohl etwas vorschnell. Habe eine Lösung gefunden auch wenn mich das Konzept immernoch etwas irritiert:

PHP:
ArrayAdapter<String> aa = new ArrayAdapter<String>(this.getContext(),R.layout.simple_spinner_item,s);
        
this.memorySetSpinner.setAdapter(aa);
 

Ähnliche Themen

A
  • AnimaAngelo85
Antworten
1
Aufrufe
333
swa00
swa00
MES
Antworten
10
Aufrufe
816
MES
MES
C
Antworten
8
Aufrufe
1.122
swa00
swa00
Zurück
Oben Unten