¿Cómo establecer programáticamente el atributo layout_align_parent_right de un botón en diseño relativo?

Tengo un diseño relativo que estoy creando mediante progtwigción:

RelativeLayout layout = new RelativeLayout( this ); RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 

Ahora tengo dos botones que quiero agregar en este diseño relativo. Pero el problema es que ambos botones se muestran a la izquierda de RelatiiveLayout superpuestos entre sí.

 buttonContainer.addView(btn1); buttonContainer.addView(btn2); 

Ahora quiero saber cómo puedo establecer programáticamente el android:layout_alignParentRight="true ” o android:layout_toLeftOf="@id/btn" atributo de botones como lo hacemos en el xml?

Puede acceder a cualquier código LayoutParams desde View.getLayoutParams . Solo tienes que estar al tanto de lo que LayoutParams accediendo. Esto normalmente se logra al verificar ViewGroup contiene si tiene un LayoutParams interno de LayoutParams entonces ese es el que debe usar. En tu caso, es RelativeLayout.LayoutParams . RelativeLayout.LayoutParams#addRule(int verb) y RelativeLayout.LayoutParams#addRule(int verb, int anchor)

Puede acceder a él a través del código:

 RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams)button.getLayoutParams(); params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); params.addRule(RelativeLayout.LEFT_OF, R.id.id_to_be_left_of); button.setLayoutParams(params); //causes layout update 
  1. necesita crear e identificar los botones que necesita para la referencia: btn1.setId(1);
  2. puede usar la variable params para agregar parámetros a su diseño, creo que el método es addRule() , consulte los documentos de android java para este objeto LayoutParams .

Para agregar un atributo RelativeLayout cuyo valor sea true o false use 0 para false y RelativeLayout.TRUE para true:

 RelativeLayout.LayoutParams params = (RelativeLayout.LayoutParams) button.getLayoutParams() params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT, RelativeLayout.TRUE) 

No importa si el atributo ya se agregó o no, todavía se usa addRule(verb, subject) para habilitarlo / deshabilitarlo. Sin embargo, después de API 17 puede usar removeRule(verb) que es solo un atajo para addRule(verb, 0) .