Obtenir la marge d'une vue

95

Comment puis-je obtenir la valeur de marge d'une vue à partir d'une activité? La vue peut être de n'importe quel type.

Après quelques recherches, j'ai trouvé des moyens d'obtenir un remplissage d'une vue, mais je n'ai rien trouvé sur Margin. Quelqu'un peut-il aider?

J'ai essayé quelque chose comme ça,

ViewGroup.LayoutParams vlp = view.getLayoutParams();
int marginBottom = ((LinearLayout.LayoutParams) vlp).bottomMargin;

Cela fonctionne, mais dans le code ci-dessus, j'ai supposé que la vue était un LinearLayout. Mais j'ai besoin d'obtenir l' marginattribut même si je ne connais pas le type de vue.

Arnab Chakraborty
la source

Réponses:

180

essaye ça:

View view = findViewById(...) //or however you need it
LayoutParams lp = (LayoutParams) view.getLayoutParams();

les marges sont accessibles via

lp.leftMargin;
lp.rightMargin;
lp.topMargin;
lp.bottomMargin;

edit: fonctionnera peut ViewGroup.MarginLayoutParams- être pour vous. C'est une classe de base pour les autres LayoutParams.

ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();

http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html

Vladimir
la source
7
En fait, je m'attendais à quelque chose comme ça, mais je ne pense pas qu'il y ait une classe directe appelée LayoutParams. Il existe des classes comme FrameLayout.LayoutParams, RelativeLayout.LayoutParamsmais rien de comparable LayoutParamsen soi. Et comme je ne connais pas le type de vue, je ne peux utiliser aucune des anciennes classes.
Arnab Chakraborty
5
et ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();alors?
Vladimir le
Doit être ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams ();
rockhammer
4

utilisez maintenant ce code édité. cela t'aidera

FrameLayout.LayoutParams lp=(FrameLayout.LayoutParams)mainLayout.getLayoutParams();

lp.leftMargin  // for left margin
lp.rightMargin   // for right margin
ilango j
la source
Les méthodes que vous avez mentionnées donnent les positions gauche, droite, haut et bas de la vue, j'ai besoin des marges.
Arnab Chakraborty
Pas nécessairement. Une vue peut - être placé dans une LinearLayoutavec l' horizontalorientation. Si c'est la deuxième vue dans la mise en page, la view.getLeft()méthode me donnerait la coordonnée de sa gauche mais la marge gauche de la vue depuis sa vue adjacente.
Arnab Chakraborty
Et si la vue est un LinearLayout?
Arnab Chakraborty
3

Comme d'autres l'ont suggéré, layout_margin # est l'espace entre le bord # du parent et votre vue.

  • # remplace "Gauche", "Droite", "Haut" ou "Bas"

Obtenir / définir des marges a fonctionné pour moi avec:

ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mView.getLayoutParams();
params.topMargin += 20;
mView.requestLayout();

Bien sûr, ma vue était en effet un ViewGroup et le parent était également un ViewGroup. Dans la plupart des cas, vous devez convertir vos paramètres de mise en page dans la classe de vue LayoutParams du parent (dans ce cas, il s'agit de ViewGroup et RelativeLayout)

milosmns
la source