Comment définir la marge de ImageView à l'aide de code, pas xml
Je veux ajouter un nombre inconnu de ImageView
vues de ma mise en page avec de la marge. En XML, je peux utiliser layout_margin
comme ceci:
<ImageView android:layout_margin="5dip" android:src="@drawable/image" />
Il est ImageView.setPadding()
, mais pas de ImageView.setMargin()
. Je pense que c'est le long des lignes de ImageView.setLayoutParams(LayoutParams)
, mais vous ne savez pas quoi alimenter ce.
Personne ne sait?
Vous devez vous connecter pour publier un commentaire.
android.view.ViewGroup.MarginLayoutParams
a une méthodesetMargins(left, top, right, bottom)
. Sous-classes directes sont:FrameLayout.LayoutParams
,LinearLayout.LayoutParams
etRelativeLayout.LayoutParams
.Par exemple à l'aide
LinearLayout
:MarginLayoutParams
Cela définit les marges en pixels. Pour mettre à l'échelle l'utilisation
DisplayMetrics
FrameLayout.LayoutParams
et peut-être avec d'autres: stackoverflow.com/questions/5401952/...android:layout_centerHorizontal = "true"
etandroid:layout_alignParentBottom = "true"
dans quel moyen je pourrais accomplir cette mission?android:layout_centerHorizontal = "true"
etandroid:layout_alignParentBottom = "true"
dans quel moyen je pourrais accomplir cette mission?Tous les exemples ci-dessus sera effectivement REMPLACER tout params déjà présente pour la Vue, ce qui peut ne pas être désirée. Le code ci-dessous va juste prolonger le params, sans les remplacer:
Kevin code crée redondant
MarginLayoutParams
objet. Version plus simple:Si vous voulez changer imageview marge, mais laisser tous les autres marges intactes.
Obtenir MarginLayoutParameters de votre affichage de l'image dans ce cas:
myImageView
Maintenant, il suffit de changer la marge que vous souhaitez modifier, mais laisser les autres tels qu'ils sont:
Vous pouvez utiliser cette méthode, dans le cas où vous souhaitez spécifier des marges en dp:
- Je utiliser simple et fonctionne très bien:
setMargins ()s'unité est le pixel pas de dp. Si vous souhaitez définir la marge en dp, juste à l'intérieur de votre values/dimens.xml fichier créer vos dimensions comme:
et d'accès comme:
Pour moi cela a fonctionné:
Si vous utilisez kotlin, cela peut être simplifié par la création d'une fonction d'extension de
Maintenant tous vous avez besoin est un avis, et cette fonction d'extension peut être utilisé n'importe où.
left
etright
marges, mais si vous avez relative des marges (start
etend
) ça ne fonctionne pas. J'ai écrit un résumé avec une "amélioration" de la version de votre code: gist.github.com/Grohden/f40c53bf86c5395638f7a44bf90e732d (lesetMarginsRelative
fonction) - pourriez-vous inclure dans votre réponse?À l'aide d'une méthode similaire à ce qui pourrait vous faire économiser des maux de tête dans certaines situations.
Si vous avez deux passes de programmatiques bricoler avec des marges, il est plus sûr de vérifier si il y a déjà quelques layoutParams ensemble. S'il y a des marges déjà on devrait augmenter et non de les remplacer:
Voici un exemple pour ajouter 8px Marge sur la gauche, haut, droite, bas.