Obtener el margen de una vista

95

¿Cómo puedo obtener el valor de margen de una vista de una actividad? La vista puede ser de cualquier tipo.

Después de buscar un poco, encontré formas de obtener el relleno de una vista, pero no pude encontrar nada en Margin. ¿Alguien puede ayudar?

Intenté algo como esto

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

Esto funciona, pero en el código anterior he asumido que la vista es LinearLayout. Pero necesito obtener el marginatributo incluso cuando no conozco el tipo de vista.

Arnab Chakraborty
fuente

Respuestas:

180

prueba esto:

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

los márgenes son accesibles a través de

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

editar: tal ViewGroup.MarginLayoutParamsvez funcione para usted. Es una clase base para otros LayoutParams.

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

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

Vladimir
fuente
7
En realidad, esperaba algo como esto, pero no creo que haya ninguna clase directa llamada LayoutParams. Hay clases como FrameLayout.LayoutParams, RelativeLayout.LayoutParamspero nada como LayoutParamsen sí mismo. Y como no conozco el tipo de vista, no puedo usar ninguna de las clases anteriores.
Arnab Chakraborty
5
¿Y ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();entonces?
Vladimir
Debe ser ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams ();
Rockhammer
4

ahora use este código editado. Esto te ayudara

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

lp.leftMargin  // for left margin
lp.rightMargin   // for right margin
ilango j
fuente
Los métodos que mencionaste dan las posiciones izquierda, derecha, superior e inferior de la vista, necesito los márgenes.
Arnab Chakraborty
No necesariamente. Una vista tal vez colocado en una LinearLayoutcon horizontalorientación. Si es la segunda vista en el diseño, el view.getLeft()método me daría la coordenada de su izquierda pero el margen izquierdo de la vista de su vista adyacente.
Arnab Chakraborty
¿Qué pasa si la Vista es un LinearLayout?
Arnab Chakraborty
3

Como sugirieron otros, layout_margin # es el espacio entre el borde # del padre y su vista.

  • # reemplaza "Izquierda", "Derecha", "Arriba" o "Abajo"

Obtener / establecer márgenes me funcionó con:

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

Por supuesto, mi Vista era de hecho un ViewGroup y el padre también era un ViewGroup. En la mayoría de los casos, debe convertir sus parámetros de diseño a la clase de vista LayoutParams del padre (en este caso es ViewGroup y RelativeLayout)

milosmns
fuente