¿Cómo puedo eliminar mediante programación una regla existente que se definió en XML?

Tengo un diseño lineal que está contenido dentro de un diseño relativo. Se establece en el archivo XML para estar a la derecha de otro diseño lineal (esto funciona bien). En algunos casos quiero cambiar la posición relativa de la disposición durante el onCreate de la actividad así que necesito modificar el "a la derecha de" parámetro para relacionarme con otra disposición. He probado esto:

RelativeLayout.LayoutParams layoutParams; layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove .getLayoutParams(); layoutParams.addRule(RelativeLayout.RIGHT_OF, R.id.new_ref_LinearLayout); 

Pero no funciona: o (

Alguna pista ?

3 Solutions collect form web for “¿Cómo puedo eliminar mediante programación una regla existente que se definió en XML?”

No se puede eliminar una regla porque todas las reglas se almacenan siempre en una matriz java de tamaño fijo. Pero puede establecer una regla en 0 . Por ejemplo

 layoutParams.addRule(RelativeLayout.RIGHT_OF, 0); layoutParams.addRule(RelativeLayout.BELOW, R.id.new_ref_LinearLayout); 

EDIT (gracias a Roger Rapid ):

A partir del nivel API 17, la clase RelativeLayout.LayoutParams tiene el siguiente método:

 public void removeRule(int verb) 

Por lo tanto, puede eliminar una regla utilizando la siguiente línea de código:

 layoutParams.removeRule(RelativeLayout.RIGHT_OF); 

Y obtendrá exactamente el mismo resultado que cuando "agrega" una regla cero como:

 layoutParams.addRule(RelativeLayout.RIGHT_OF, 0); 

Creo que tienes que llamar a:

relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);

Después de cambiar LayoutParams.

En respuesta a la edición, puede crear nuevos LayoutParameters utilizando:

 LinearLayout.LayoutParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.FILL_PARENT); 

Y luego agregue sus nuevas reglas. A continuación, actualice los parámetros de diseño utilizando el método updateViewLayout () anteriormente mencionado.

Agregue el código siguiente a su código existente

linearLayoutToMove.setLayoutParams(layoutParams)

Creo que esto debería hacer el trabajo. En caso de que si la línea anterior no funciona, trate de llamar a linearLayoutToMove.invalidate() después de la línea anterior.

  • Android GLSurfaceView fondo transparente sin setZOrderonTop
  • Cómo rellenar el espacio entre dos vistas dentro de un RelativeLayout
  • Establecer parámetros en las vistas secundarias de un RelativeLayout
  • diseño con botones en un círculo?
  • Android: onClickListener para relativelayout
  • Cómo inflar RelativeLayout de XML
  • VelocityTracker dando resultados aparentemente aleatorios
  • Cómo hacer relleno de imagen RelativeLayout fondo sin estiramiento
  • Alinear la casilla de verificación dentro de un diseño relativo
  • Android ScrollView no funciona correctamente
  • ¿Puedo configurar "android: layout_below" en tiempo de ejecución, de forma programática?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.