¿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.

  • ConstraintLayout Vs RelativeLayout y CardView - Caché y espacio de memoria
  • ImageView adjustViewBounds no funciona con Disposición relativa
  • Cambio de color de TextView en el enfoque / presione
  • Equivalente de RelativeLayout en Flutter
  • RelativeLayout no maneja "toLeftOf" y / o toRightOf correctamente
  • RelativeLayout con scrollview no desplazamiento
  • ¿Por qué tengo espacio en blanco en la parte superior y en la parte inferior de mi ImageView en mi RelativeLayout?
  • ¿Diferencia entre el marco y el diseño relativo?
  • RelativeLayout, alinee una vista en la parte inferior de otra vista pero siempre debajo de otra
  • Android relative layout below 2 artículos
  • TextView y Ellipsize cuando es apretado por otro TextView
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.