Cet attribut peut-il être modifié dynamiquement dans le code Java?
android:layout_marginRight
J'ai un TextView
, qui doit changer sa position de quelques pixels vers la gauche dynamiquement.
Comment le faire par programmation?
EDIT: Une manière plus générique de faire cela qui ne repose pas sur le type de mise en page (à part le fait qu'il s'agit d'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 documents pour TextView . Fondamentalement, vous voudrez obtenir l'objet LayoutParams de TextView et modifier les marges, puis le redéfinir sur 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 pour le moment, donc mon casting est peut-être un peu décalé, mais les LayoutParams doivent être modifiés pour changer la marge.
N'oubliez pas que si votre TextView est à l'intérieur, par exemple, d'un RelativeLayout , il faut utiliser RelativeLayout.LayoutParams au lieu de LinearLayout.LayoutParams
Utilisez LayoutParams (comme expliqué déjà). Cependant, faites attention aux LayoutParams à choisir. Selon https://stackoverflow.com/a/11971553/3184778 "vous devez utiliser celui qui se rapporte au PARENT de la vue sur laquelle vous travaillez, pas la vue réelle"
Si, par exemple, le TextView est à l'intérieur d'un TableRow, vous devez utiliser TableRow.LayoutParams au lieu de RelativeLayout ou LinearLayout
la source
Utilisez cette fonction pour définir tous les types de marges
la source
Mise à jour: Android KTX
Le module Core KTX fournit des extensions pour les bibliothèques courantes qui font partie du framework Android,
androidx.core.view
parmi elles.Les fonctions d'extension suivantes sont pratiques pour gérer les marges:
setMargins()
fonction d'extension:Définit les marges de tous les axes dans le
ViewGroup
'sMarginLayoutParams
. (La dimension doit être fournie en pixels, voir la dernière section si vous souhaitez travailler avec dp)updateMargins()
fonction d'extension:Met à jour les marges dans le
ViewGroup
'sViewGroup.MarginLayoutParams
.updateMarginsRelative()
fonction d'extension:Met à jour les marges relatives dans les
ViewGroup
'sMarginLayoutParams
(début / fin au lieu de gauche / droite).Les propriétés d'extension suivantes sont pratiques pour obtenir les marges actuelles:
dp
au lieu depx
:Si vous souhaitez travailler avec
dp
(pixels indépendants de la densité) au lieu depx
, vous devrez d'abord les convertir. Vous pouvez facilement le faire avec la propriété d'extension suivante:Ensuite, vous pouvez appeler les fonctions d'extension précédentes telles que:
Ancienne réponse:
Dans Kotlin, vous pouvez déclarer une fonction d'extension comme:
Ensuite, vous pouvez l'appeler comme:
Ou:
la source