Ich möchte ImageView
meinem Layout eine unbekannte Anzahl von Ansichten mit Rand hinzufügen . In XML kann ich Folgendes verwenden layout_margin
:
<ImageView android:layout_margin="5dip" android:src="@drawable/image" />
Es gibt ImageView.setPadding()
, aber nein ImageView.setMargin()
. Ich denke, es ist in etwa so ImageView.setLayoutParams(LayoutParams)
, aber ich bin mir nicht sicher, was ich dazu beitragen soll .
Weiß jemand?
FrameLayout.LayoutParams
und möglicherweise mit anderen geben kann: stackoverflow.com/questions/5401952/…android:layout_centerHorizontal = "true"
undandroid:layout_alignParentBottom = "true"
auf welche Weise könnte ich dies erreichen?quelle
android:layout_centerHorizontal = "true"
undandroid:layout_alignParentBottom = "true"
auf welche Weise könnte ich dies erreichen?Alle obigen Beispiele ersetzen tatsächlich alle Parameter, die bereits für die Ansicht vorhanden sind, was möglicherweise nicht erwünscht ist. Der folgende Code erweitert lediglich die vorhandenen Parameter, ohne sie zu ersetzen:
quelle
Kevins Code erstellt ein redundantes
MarginLayoutParams
Objekt. Einfachere Version:quelle
Wenn Sie den Bildansichtsrand ändern möchten, aber alle anderen Ränder intakt lassen möchten.
Holen Sie sich in diesem Fall MarginLayoutParameters Ihrer Bildansicht:
myImageView
Ändern Sie nun einfach den Rand, den Sie ändern möchten, und lassen Sie die anderen unverändert:
quelle
Sie können diese Methode verwenden, wenn Sie Ränder in dp angeben möchten:
quelle
Ich benutze einfach das und funktioniert super:
Die Einheit von setMargins () ist Pixel, nicht dp. Wenn Sie den Rand in dp festlegen möchten , erstellen Sie Ihre Dimensionen direkt in Ihrer Datei values / dimension.xml wie folgt :
und Zugriff wie:
quelle
Wenn Sie Kotlin verwenden, kann dies durch Erstellen einer Erweiterungsfunktion vereinfacht werden
Jetzt brauchen Sie nur noch eine Ansicht, und diese Erweiterungsfunktion kann überall verwendet werden.
quelle
left
undright
Ränder, aber wenn Sie relative Ränder (start
undend
) haben, funktioniert es nicht. Ich habe eine Liste mit einer 'verbesserten' Version Ihres Codes geschrieben: gist.github.com/Grohden/f40c53bf86c5395638f7a44bf90e732d (diesetMarginsRelative
Funktion) - könnten Sie das in Ihre Antwort aufnehmen?quelle
Bei mir hat das geklappt:
quelle
quelle
Die Verwendung einer ähnlichen Methode kann Ihnen in bestimmten Situationen Kopfschmerzen ersparen. Wenn Sie zwei Durchgänge programmatisches Basteln mit Rändern haben, ist es sicherer zu überprüfen, ob bereits einige layoutParams festgelegt sind. Wenn es bereits einige Ränder gibt, sollte man diese erhöhen und nicht ersetzen:
quelle
Hier ist ein Beispiel zum Hinzufügen eines 8px-Randes links, oben, rechts, unten.
quelle
Antwort aus dem Jahr 2020:
und kalibrieren Sie es einfach in Ihrem Code
quelle