2011-09-19 7 views
72

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 un peu de recherche, 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?Obtenir la marge d'une vue

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 je pris la vue d'un LinearLayout. Mais j'ai besoin de l'attribut margin même si je ne connais pas le type de vue.

Répondre

136

essayez ceci:

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

marges sont accessibles via

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

modifier: peut-être ViewGroup.MarginLayoutParams travaillera 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

+5

En fait, je m'attendais à quelque chose comme ça, mais je ne pense pas qu'il existe une classe directe appelée 'LayoutParams ' '. Il y a des classes comme 'FrameLayout.LayoutParams',' RelativeLayout.LayoutParams', mais rien de tel que 'LayoutParams' en soi. Et puisque je ne connais pas le type de la vue, je ne peux utiliser aucune des anciennes classes. –

+4

qu'en est-il de 'ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();' alors? – Vladimir

+0

Doit être ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); – rockhammer

4

utilisent maintenant ce code modifié. cela vous aidera à

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

lp.leftMargin // for left margin 
lp.rightMargin // for right margin 
+0

Les méthodes que vous avez mentionnées donnent les positions gauche, droite, supérieure et inférieure de la vue, j'ai besoin des marges. –

+0

marge dans le sens combien de temps de gauche à droite ... –

+0

Pas nécessairement. Une vue peut être placée dans un LinearLayout avec une orientation horizontale.Si c'est la deuxième vue dans la mise en page, la méthode 'view.getLeft()' me donnerait la coordonnée de sa gauche mais la marge gauche de la vue de sa vue adjacente. –

2

Comme d'autres ont suggéré, layout_margin # est l'espace entre le bord # et votre point de vue de la société mère.

  • # remplace "gauche", "droite", "Haut" ou "Bas"

marges Obtenir/réglage ont travaillé pour moi avec:

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

Bien sûr, mon point de vue était en effet un ViewGroup et le parent était également un ViewGroup. Dans la plupart des cas, vous devez transtyper vos paramètres de disposition dans la classe View LayoutParams du parent (dans ce cas, ViewGroup et RelativeLayout)