Android-Layout Params ändern, NUR Breite und Höhe
Ich weiß, wie ich die Breite und die Höhe einer Ansicht mit LayoutParams
über Folgendes tun:
android.view.ViewGroup.LayoutParams params = button.getLayoutParams();
params.width = height/7;
params.height = height/10;
button.setLayoutParams(params);
Nun, sobald ich will, gelten die gleichen Höhe und der Breite auf eine andere Taste, die ich brauche, um einen anderen LayoutParams oder überschreiben Sie den vorhandenen ein, wie hier:
android.view.ViewGroup.LayoutParams params2 = but2.getLayoutParams();
params2.width = height/7;
params2.height = height/10;
but2.setLayoutParams(params2);
Habe ich über 50 buttons in meiner Anwendung, und ich bezweifle, dass es als guter code, um alle Parameter um nur die Breite ändern und die Höhe - ich will, dass die übrigen Parameter (toLeftOf, [...]).
Gibt es eine Möglichkeit, NUR die Breite ändern und die Höhe der params-aber halten Sie den rest der Parameter? Also es sieht dann aus wie so etwas wie:
android.view.ViewGroup.LayoutParams params = button.getLayoutParams();
params.width = height/7;
params.height = height/10;
button.setLayoutParams(params);
button2.setLayoutParams(params);
button3.setLayoutParams(params);
butt[...]
Vielen Dank im Voraus.
- Tun alle Tasten haben die gleiche Breite und Höhe?
- Breite!=Höhe, aber die Höhe(button)==Höhe(Taste+1) und Breite(button)==Breite(Taste+1)
- Ist, dass für alle Tasten? Oder nur für 2?
- Alle von Ihnen. Sorry für die mathmatic Darstellung; Was auch immer-Taste, Sie sehen, die nächste hat die gleichen Params
- Wie sind Sie mit dem erstellen Ihrer buttons? Programmgesteuert oder mithilfe eines layout-XML-Datei?
- Durch XML. Und es ist tatsächlich eine eigene Klasse von RelativeLayout, aber das sollte keine Rolle.
- Haben Sie versucht, zu initialisieren
params
mit der übergeordneten Ansicht statt? Wie dieseRelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(height/7, height/10);
. Und dann wiederverwendenparams
.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist der ganze Zweck der Verwendung der Methode
getLayoutParams()
ist es, die vorhandenen aus einemView
(die halten alle die Regeln und so). Dann können Sie ändern Sie bestimmte Parameter dieserLayoutParams
und halten Sie den rest unverändert. Deshalb müssen zu nennengetLayoutParams()
und ändern Sie das zurückgegebene Objekt wenn IhrViews
variieren von Einstellungen in xml. Im Falle der Verwendung genau die gleichen Regeln in xml, man könnte es genau so machen wie du geschrieben hast in deinem letzten Beispiel.Was ich empfehlen Sie tun, ist nur eine Methode, die würde wickeln Sie den gesamten Prozess der Aktualisierung
LayoutParams
. Etwa so:Dass würde den code vereinfachen erheblich, denn dann kann man nur rufen Sie diese Methode für jeden einzelnen Ihrer Knöpfe, mit der richtigen Werte für Breite und Höhe.
In Kotlin wir können es kürzer und eleganter:
Anderen Antworten gesagt haben: Sie müssen
getLayoutParams()
wird, ändern Sie die zurückgegebenen LayoutParams-Objekt, undsetLayoutParams()
mit (ob dies eine vernünftige API zur Debatte).Aber als comm1x sagt, Kotlin machen kann, das ist wirklich einfach und leicht zu Lesen.
Wie wäre es damit:
Dies erfordert eine Erweiterung Funktion:
Wenn Sie wollten, gelten die gleichen layout-Parameter, um mehrere
View
s, die Sie tun können, so etwas wie:PS. Kotlin ist nichts weniger als fantastisch.
Da kann ich nicht kommentieren, andere noch nicht:
Ich erstellte eine kleine und elegante Erweiterung Funktion für Kotlin.
Einen Anwendungsfall für eine Ansicht in einem constraintLayout zum Beispiel wäre:
Wenn Sie nicht brauchen eine spezifische Implementierung von LayoutParams (es wird empfohlen, die Verwendung einer bestimmten eine), können Sie eine kleinere version der Erweiterung Funktion:
..was wäre die Folge: