J'essaie de créer dynamiquement des TableRow
objets et de les ajouter à un TableLayout
. Les TableRow
objets ont 2 éléments, un TextView
et unCheckBox
. Les TextView
éléments doivent avoir leur poids de mise en page défini sur 1 pour pousser les CheckBox
éléments à l'extrême droite.
Je ne trouve pas de documentation sur la façon de définir par programmation le poids de la mise en page d'un TextView
élément.
TextView tv = (TextView) findViewById(R.id.your_textview_inside_the_linearlayout); tv.setLayoutParams(new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 0.1f));
TableRow.LayoutParams
doit être utilisé à la place deTableLayout.LayoutParams
. Voir la réponse de @ Dorje.La réponse est que vous devez utiliser TableRow.LayoutParams, pas LinearLayout.LayoutParams ou tout autre LayoutParams.
Les différents LayoutParams ne sont pas interchangeables et si vous utilisez le mauvais, alors rien ne semble se produire. Le parent de la vue texte est une ligne de tableau, d'où:
http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
la source
LayoutParams
TableRow.LayoutParams
a fait le travail pour moi aussiDans les réponses précédentes, le poids est transmis au constructeur d'un nouvel objet SomeLayoutType.LayoutParams. Dans de nombreux cas, il est toujours plus pratique d'utiliser des objets existants - cela permet d'éviter de traiter des paramètres qui ne nous intéressent pas.
Un exemple:
la source
1f est dénoté comme poids = 1; vous pouvez donner 2f ou 3f, les vues se déplaceront selon l'espace
la source
il suffit de définir les paramètres de mise en page dans cette mise en page comme
créer une variable param
1f est variable en poids
définissez votre widget ou mise en page comme
la source
LinearLayout.LayoutParams
constructeur. Le troisième paramètre est le poids. Ou documentation(OU)
1f est appelé poids = 1; selon votre besoin, vous pouvez donner 2f ou 3f, les vues se déplaceront selon l'espace. Pour faire la distance spécifiée entre les vues dans la disposition linéaire, utilisez la somme de poids pour "LinearLayout".
la source
Cela devrait vous convenir
la source
Vous pouvez également donner du poids séparément comme ceci,
la source
Ce travail pour moi, et j'espère qu'il fonctionnera aussi pour vous
Définissez d'abord les LayoutParams pour la vue parent:
puis définissez pour TextView (enfant):
la source
Il existe une autre façon de procéder. Dans le cas où vous ne devez définir qu'un seul paramètre, par exemple «hauteur»:
la source
Après avoir lutté pendant 4 heures. Enfin, ce code a fonctionné pour moi.
3 colonnes sont là dans une rangée.
la source
J'ai eu beaucoup de difficulté avec une solution quelque chose de très similaire à ceci: essayer d'avoir deux boutons dans un TableRow, chacun étant la moitié de la largeur de l'écran. Pour une raison quelconque, le bouton gauche serait toujours d'environ 70% de la largeur et le bouton droit 30%. L'appel de table_layout.setStretchAllColumns (true) n'a eu aucun effet, ni la définition de la largeur du bouton à la moitié de l'écran, ni la définition de leur poids de mise en page.
La solution que j'ai trouvée était d'imbriquer un LinearLayout dans les TableRows, qui tenait compte de la valeur de la largeur des boutons.
la source
layout_width=fill_parent
, et après cela, définissez lelayout_weight=1
pour à la fois button1 et button2. Tous les éléments avec fill_parent et un layout_weight = 1 recevront une taille égale lors du gonflage.