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?
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
btn1.setId(1);
addRule()
, consultez les docs Android Java pour cet objet LayoutParams
.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)
.