Kann dieses Attribut in Java-Code dynamisch geändert werden?
android:layout_marginRight
Ich habe eine TextView
, die ihre Position einige Pixel nach links dynamisch ändern muss.
Wie geht das programmgesteuert?
BEARBEITEN: Eine allgemeinere Methode, die nicht vom Layouttyp abhängt (außer dass es sich um einen Layouttyp handelt, der Ränder unterstützt):
public static void setMargins (View v, int l, int t, int r, int b) {
if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
p.setMargins(l, t, r, b);
v.requestLayout();
}
}
Sie sollten die Dokumente auf TextView überprüfen . Grundsätzlich möchten Sie das LayoutParams-Objekt von TextView abrufen, die Ränder ändern und dann wieder auf TextView zurücksetzen. Angenommen, es befindet sich in einem LinearLayout, versuchen Sie Folgendes:
TextView tv = (TextView)findViewById(R.id.my_text_view);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tv.getLayoutParams();
params.setMargins(0, 0, 10, 0); //substitute parameters for left, top, right, bottom
tv.setLayoutParams(params);
Ich kann es momentan nicht testen, daher ist mein Casting möglicherweise etwas verschoben, aber die LayoutParams müssen geändert werden, um den Rand zu ändern.
Vergessen Sie nicht, dass Sie, wenn sich Ihre Textansicht beispielsweise in einem RelativeLayout befindet , RelativeLayout.LayoutParams anstelle von LinearLayout.LayoutParams verwenden sollten
Verwenden Sie LayoutParams (wie bereits erläutert). Achten Sie jedoch darauf, welche LayoutParams Sie auswählen. Laut https://stackoverflow.com/a/11971553/3184778 "müssen Sie diejenige verwenden, die sich auf das ELTERN der Ansicht bezieht, an der Sie arbeiten, nicht die tatsächliche Ansicht."
Befindet sich die Textansicht beispielsweise in einer TableRow, müssen Sie TableRow.LayoutParams anstelle von RelativeLayout oder LinearLayout verwenden
quelle
Verwenden Sie diese Funktion, um alle Randtypen festzulegen
quelle
Update: Android KTX
Das Core KTX-Modul bietet Erweiterungen für allgemeine Bibliotheken, die unter anderem Teil des Android-Frameworks sind
androidx.core.view
.Die folgenden Erweiterungsfunktionen sind praktisch, um mit Rändern umzugehen:
setMargins()
Erweiterungsfunktion:Legt die Ränder aller Achsen in den
ViewGroup
's festMarginLayoutParams
. (Die Bemaßung muss in Pixel angegeben werden. Weitere Informationen finden Sie im letzten Abschnitt, wenn Sie mit dp arbeiten möchten.)updateMargins()
Erweiterungsfunktion:Aktualisiert die Ränder in den
ViewGroup
'sViewGroup.MarginLayoutParams
.updateMarginsRelative()
Erweiterungsfunktion:Aktualisiert die relativen Ränder in den
ViewGroup
'sMarginLayoutParams
(Start / Ende statt links / rechts).Die folgenden Erweiterungseigenschaften sind praktisch, um die aktuellen Ränder abzurufen:
dp
stattpx
:Wenn Sie
dp
stattdessen mit (dichteunabhängigen Pixeln) arbeiten möchtenpx
, müssen Sie diese zuerst konvertieren. Mit der folgenden Erweiterungseigenschaft können Sie dies problemlos tun:Dann können Sie die vorherigen Erweiterungsfunktionen wie folgt aufrufen:
Alte Antwort:
In Kotlin können Sie eine Erweiterungsfunktion wie folgt deklarieren:
Dann können Sie es so nennen:
Oder:
quelle