web-dev-qa-db-fra.com

Comment définir par programme l'attribut layout_align_parent_right d'un bouton dans la disposition relative?

J'ai une mise en page relative que je crée par programme:

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

Maintenant, j'ai deux boutons que je veux ajouter dans cette mise en page relative. Mais le problème est que les deux boutons sont affichés à gauche du RelatiiveLayout qui se chevauchent.

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

Maintenant, je veux savoir comment puis-je définir par programme l'attribut Android:layout_alignParentRight="true "ou Android:layout_toLeftOf="@id/btn" des boutons comme nous le faisons dans le xml?

274
Fahad Ali

Vous pouvez accéder à n'importe quel LayoutParams à partir de code en utilisant View.getLayoutParams. Vous devez juste être très conscient de ce que LayoutParams votre accès. Ceci est normalement réalisé en vérifiant la variable ViewGroup si elle a un enfant interne LayoutParams alors c'est celle que vous devriez utiliser. Dans votre cas, c'est RelativeLayout.LayoutParams. Vous allez utiliser RelativeLayout.LayoutParams#addRule(int verb) et RelativeLayout.LayoutParams#addRule(int verb, int anchor)

Vous pouvez y accéder via le code:

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
622
Rich Schuler
  1. vous devez créer et identifier les boutons à référencer: btn1.setId(1);
  2. vous pouvez utiliser la variable params pour ajouter des paramètres à votre mise en page, je pense que la méthode est addRule(), consultez les docs Android Java pour cet objet LayoutParams .
12
codeScriber

Pour ajouter un attribut RelativeLayout dont la valeur est true ou false, utilisez 0 pour false et RelativeLayout.TRUE pour true:

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

Peu importe que l'attribut ait déjà été ajouté ou non, vous utilisez toujours addRule(verb, subject) pour l'activer/le désactiver. Cependant, post-API 17, vous pouvez utiliser removeRule(verb) qui n'est qu'un raccourci pour addRule(verb, 0).

5
shoe