Ich versuche, Java ( nicht XML ) zu verwenden, um ein LinearLayout mit Schaltflächen zu erstellen, die den Bildschirm ausfüllen und Ränder haben. Hier ist Code, der ohne Ränder funktioniert:
LinearLayout buttonsView = new LinearLayout(this);
buttonsView.setOrientation(LinearLayout.VERTICAL);
for (int r = 0; r < 6; ++r) {
Button btn = new Button(this);
btn.setText("A");
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); // Verbose!
lp.weight = 1.0f; // This is critical. Doesn't work without it.
buttonsView.addView(btn, lp);
}
ViewGroup.LayoutParams lp = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT);
setContentView(buttonsView, lp);
Das funktioniert also gut, aber wie um alles in der Welt geben Sie den Schaltflächen Ränder, damit zwischen ihnen Platz ist? Ich habe es versucht LinearLayout.MarginLayoutParams
, aber das hat kein weight
Mitglied, also ist es nicht gut. Und es funktioniert auch nicht, wenn Sie es lp
in seinem Konstruktor übergeben.
Ist das unmöglich Weil es sicher so aussieht und es nicht die erste Android-Layoutaufgabe wäre, die Sie nur in XML ausführen können.
Antworten:
Hier ist ein kleiner Code, um dies zu erreichen:
quelle
Sie rufen
setMargins()
dasLinearLayout.LayoutParams
Objekt an.LinearLayout.LayoutParams
ist eine Unterklasse vonLinearLayout.MarginLayoutParams
, wie in der Dokumentation angegeben .Nein.
Gerne können Sie diesen Anspruch nachweisen.
Persönlich ist mir nichts bekannt, was nur über XML und nicht über Java-Methoden im SDK erreicht werden kann. Tatsächlich muss per Definition alles über Java möglich sein (allerdings nicht unbedingt über SDK-erreichbare Methoden), da XML kein ausführbarer Code ist. Aber wenn Sie etwas wissen, weisen Sie darauf hin, denn das ist ein Fehler im SDK, der eines Tages behoben werden sollte.
quelle
LayoutPararms
. Ich Begriffe von Stilen ... ja, es gibt einen Grund, warum ich sie nicht benutze. :-)Um Elemente direkt zu Elementen hinzuzufügen (einige Elemente ermöglichen die direkte Bearbeitung von Rändern), haben Sie folgende Möglichkeiten:
... dies funktioniert, ohne dass Sie das umgebende Layout kennen / bearbeiten müssen. Beachten Sie die Prüfung "instanceof", falls Sie versuchen, dies für etwas auszuführen, das keine Ränder unterstützt.
quelle
Aufgrund der unterschiedlichen Pixeldichten des Gerätebildschirms ist es gut, immer die
DIP
Einheit zu verwenden, um den Rand programmgesteuert einzustellen. Wie unten_Hoffe das wird helfen.
quelle
Ich habe Ränder direkt mit dem folgenden Code eingerichtet
Hier ist nur zu beachten, dass
LayoutParams
für das folgende Paket importiert werden sollteandroid.widget.RelativeLayout.LayoutParams
, da sonst ein Fehler auftritt.quelle
Versuche dies
quelle
quelle
Versuche dies:
quelle
Sie sollten den Typ der Ansichtsgruppe der Ansicht kennen. Im obigen Code möchte ich beispielsweise den Rand des FrameLayout ändern, und die Ansichtsgruppe des FrameLayout ist ein RelativeLayout . Sie müssen also zu (RelativeLayout.LayoutParams) wechseln
quelle
Hier eine einzeilige Lösung:
quelle