J'ai une disposition linéaire qui est contenue dans une disposition relative. Il est défini dans le fichier XML pour être à droite d'une autre disposition linéaire (cela fonctionne très bien). Dans certains cas, je souhaite modifier la position relative de la mise en page lors de la création de l'activité, je dois donc modifier le paramètre "à droite de" pour le relier à une autre mise en page. J'ai essayé ceci:
RelativeLayout.LayoutParams layoutParams;
layoutParams = (RelativeLayout.LayoutParams) linearLayoutToMove
.getLayoutParams();
layoutParams.addRule(RelativeLayout.RIGHT_OF,
R.id.new_ref_LinearLayout);
Mais cela ne fonctionne pas: o (
Des indices?
Vous ne pouvez pas supprimer une règle car toutes les règles sont toujours stockées dans un tableau de taille fixe Java array. Mais vous pouvez définir une règle sur 0
. Par exemple
layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
layoutParams.addRule(RelativeLayout.BELOW, R.id.new_ref_LinearLayout);
[~ # ~] éditez [~ # ~] (grâce à Roger Rapid ):
Depuis le niveau 17 de l'API, la classe RelativeLayout.LayoutParams
a la méthode suivante:
public void removeRule(int verb)
Vous pouvez donc supprimer une règle à l'aide de la ligne de code suivante:
layoutParams.removeRule(RelativeLayout.RIGHT_OF);
Et vous obtiendrez exactement le même résultat que lors de l'ajout d'une règle zéro comme:
layoutParams.addRule(RelativeLayout.RIGHT_OF, 0);
Je pense que vous devez appeler:
relativeLayout.updateViewLayout(linearLayoutToMove, layoutParams);
après avoir changé les LayoutParams.
En réponse à la modification, vous pouvez créer de nouveaux paramètres de disposition en utilisant:
LinearLayout.LayoutParams = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.FILL_PARENT,
LinearLayout.LayoutParams.FILL_PARENT);
puis ajoutez vos nouvelles règles. Ensuite, mettez à jour les paramètres de disposition à l'aide de la méthode updateViewLayout () mentionnée précédemment.
ajoutez le code suivant à votre code existant
linearLayoutToMove.setLayoutParams(layoutParams)
Je pense que cela devrait faire l'affaire. Si la ligne ci-dessus ne fonctionne pas, essayez d'appeler linearLayoutToMove.invalidate()
après la ligne ci-dessus.