Chcę dodać nieznaną liczbę ImageView
widoków do mojego układu z marginesami. W XML mogę użyć w layout_margin
ten sposób:
<ImageView android:layout_margin="5dip" android:src="@drawable/image" />
Jest ImageView.setPadding()
, ale nie ImageView.setMargin()
. Myślę, że jest to podobne ImageView.setLayoutParams(LayoutParams)
, ale nie jestem pewien, czym się w to karmić.
Czy ktoś wie?
FrameLayout.LayoutParams
innymi: stackoverflow.com/questions/5401952/…android:layout_centerHorizontal = "true"
iwandroid:layout_alignParentBottom = "true"
jaki sposób mógłbym to osiągnąć?źródło
android:layout_centerHorizontal = "true"
iwandroid:layout_alignParentBottom = "true"
jaki sposób mógłbym to osiągnąć?Wszystkie powyższe przykłady faktycznie ZMIENI wszelkie parametry już obecne w Widoku, co może nie być pożądane. Poniższy kod po prostu rozszerzy istniejące parametry, bez ich zastępowania:
źródło
Kod Kevina tworzy nadmiarowy
MarginLayoutParams
obiekt. Prostsza wersja:źródło
Jeśli chcesz zmienić margines widoku obrazu, ale pozostałe marginesy pozostaw nienaruszone.
Pobierz MarginLayoutParameters widoku obrazu w tym przypadku:
myImageView
Teraz po prostu zmień margines, który chcesz zmienić, ale pozostałe pozostaw bez zmian:
źródło
Możesz użyć tej metody, jeśli chcesz określić marginesy w dp:
źródło
Używam po prostu tego i działa świetnie:
Jednostką setMargins () jest piksel, a nie dp. Jeśli chcesz ustawić margines w dp, po prostu w pliku values / dimens.xml utwórz wymiary takie jak:
i dostęp jak:
źródło
Jeśli używasz kotlin, można to uprościć, tworząc funkcję rozszerzającą
Teraz wszystko, czego potrzebujesz, to widok, a tej funkcji rozszerzenia można używać w dowolnym miejscu.
źródło
left
iright
, ale jeśli masz marginesy względne (start
iend
), to nie działa. Napisałem streszczenie z „ulepszoną” wersją Twojego kodu: gist.github.com/Grohden/f40c53bf86c5395638f7a44bf90e732d (setMarginsRelative
funkcja) - czy możesz uwzględnić to w swojej odpowiedzi?źródło
U mnie to zadziałało:
źródło
źródło
Użycie metody podobnej do tej może w niektórych sytuacjach oszczędzić Ci bólu głowy. Jeśli masz dwa przebiegi programowego majstrowania przy marginesach, bezpieczniej jest sprawdzić, czy są już ustawione parametry layoutParams. Jeśli są już jakieś marże, to należy je zwiększyć, a nie zastępować:
źródło
Oto przykład dodania marginesu 8px po lewej, górnej, prawej i dolnej stronie.
źródło
Odpowiedź z 2020 roku:
i wywołaj go po prostu w swoim kodzie
źródło