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

  • 5 Antworten
  • Neuester Beitrag
Diskutiere Button in RelativeLayout Container mittig zentrieren (kein XML!)? im Android App Entwicklung im Bereich Betriebssysteme & Apps.
flyMASTER

flyMASTER

Neues Mitglied
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 :)
 
M

miracle2k

Ambitioniertes Mitglied
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:
flyMASTER

flyMASTER

Neues Mitglied
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?
 
M

miracle2k

Ambitioniertes Mitglied
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.
 
flyMASTER

flyMASTER

Neues Mitglied
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?
 
flyMASTER

flyMASTER

Neues Mitglied
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 - Button in RelativeLayout Container mittig zentrieren (kein XML!)? Antworten Datum
16
4
1