2011-09-19 13 views
72

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

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

He intentado algo como esto,

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

Esto funciona, pero en el código anterior he asumido el fin de ser un LinearLayout. Pero necesito obtener el atributo margin incluso cuando no conozco el tipo de vista.

Respuesta

136

probar esto:

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

márgenes son accesibles a través de

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

edición: quizá ViewGroup.MarginLayoutParams va a trabajar 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

+5

. Realmente esperaba algo como esto, pero no creo que haya ninguna clase directa llamada 'LayoutParams '. Hay clases como 'FrameLayout.LayoutParams',' RelativeLayout.LayoutParams', pero nada como 'LayoutParams' en sí mismo. Y como no conozco el tipo de vista, no puedo usar ninguna de las clases anteriores. –

+4

¿qué tal 'ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams();' then? – Vladimir

+0

Debe ser ViewGroup.MarginLayoutParams lp = (ViewGroup.MarginLayoutParams) view.getLayoutParams(); – rockhammer

4

ahora usan este código editado. esto le ayudará a

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

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

Los métodos que mencionó dan las posiciones izquierda, derecha, superior e inferior de la vista, necesito los márgenes. –

+0

margen en el sentido de cuánto tiempo desde la izquierda y la derecha ... –

+0

No necesariamente. Una vista puede colocarse en una orientación 'LinearLayout' con' horizontal'.Si es la segunda vista en el diseño, el método 'view.getLeft()' me daría la coordenada de su izquierda, pero el margen izquierdo de la vista desde su vista adyacente. –

2

Como otros sugirieron, layout_margin # es el espacio entre el # borde de los padres y su punto de vista.

  • # sustituye a la "izquierda", "derecha", "superior" o "inferior"

Conseguir/márgenes de ajuste trabajaron para mí con:

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

Por supuesto, mi punto de 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 en la clase View View LayoutParams (en este caso es ViewGroup y Relative Lay)

Cuestiones relacionadas