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.

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


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

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)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.