199 votes

Changer la bonne marge d'une vue par programme?

cet attribut peut-il être modifié dynamiquement en code Java?

android:layout_marginRight

J'ai un TextView, qui doit changer sa position de quelques pixels à gauche dynamiquement.

Je pense que cela doit être fait par programme.

Comment puis-je le faire?

513voto

kcoppock Points 57219

EDIT: plus générique façon de faire qui ne repose pas sur le type de mise en page (autres que c'est un type de mise en page qui prend en charge les marges):

public static void setMargins (View v, int l, int t, int r, int b) {
    if (v.getLayoutParams() instanceof ViewGroup.MarginLayoutParams) {
        ViewGroup.MarginLayoutParams p = (ViewGroup.MarginLayoutParams) v.getLayoutParams();
        p.setMargins(l, t, r, b);
        v.requestLayout();
    }
}

Vous devriez vérifier les docs pour TextView. Fondamentalement, vous aurez envie d'obtenir le TextView de LayoutParams objet, et de modifier les marges, puis revenir à la TextView. En supposant que c'est dans un LinearLayout, essayez quelque chose comme ceci:

TextView tv = (TextView)findViewById(R.id.my_text_view);
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams)tv.getLayoutParams();
params.setMargins(0, 0, 10, 0); //substitute parameters for left, top, right, bottom
tv.setLayoutParams(params);

Je ne peux pas le tester dès maintenant, donc mon casting peut être désactivé par un peu, mais le LayoutParams sont ce qui doit être modifié pour changer la marge.

NOTE

N'oubliez pas que si votre TextView est à l'intérieur, par exemple, un RelativeLayout, il faut utiliser le RelativeLayout.LayoutParams au lieu de LinearLayout.LayoutParams

17voto

kouretinho Points 131

Utilisez LayoutParams (comme déjà expliqué). Attention toutefois aux LayoutParams à choisir. Selon http://stackoverflow.com/a/11971553/3184778 "vous devez utiliser celui qui concerne le PARENT de la vue sur laquelle vous travaillez, pas la vue réelle"

Si, par exemple, TextView se trouve dans un TableRow, vous devez utiliser TableRow.LayoutParams au lieu de RelativeLayout ou LinearLayout.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X