J'essaie de créer dynamiquement des objets TableRow
et de les ajouter à un objet TableLayout
. Les objets TableRow
ont 2 éléments, un TextView
et un CheckBox
. Le poids de la disposition des éléments TextView
doit être défini sur 1 pour que les éléments CheckBox
puissent être poussés à l'extrême droite.
Je ne trouve pas de documentation sur la manière de définir par programme le poids de la présentation d'un élément TextView
.
Vous devez utiliser TableLayout.LayoutParams
avec quelque chose comme ceci:
TextView tv = new TextView(v.getContext());
tv.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT, 1f));
Le dernier paramètre est le poids.
La réponse est que vous devez utiliser TableRow.LayoutParams, et non LinearLayout.LayoutParams ou tout autre LayoutParams.
TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);
Les différents LayoutParams ne sont pas interchangeables et si vous utilisez le mauvais, rien ne semble se passer. Le parent de la vue texte est une ligne de table, d'où:
http://developer.Android.com/reference/Android/widget/TableRow.LayoutParams.html
Dans les réponses précédentes, weight est transmis au constructeur d'un nouvel objet SomeLayoutType.LayoutParams. Dans de nombreux cas, il est plus pratique d’utiliser des objets existants. Cela évite de traiter des paramètres qui ne nous intéressent pas.
Un exemple:
// Get our View (TextView or anything) object:
View v = findViewById(R.id.our_view);
// Get params:
LinearLayout.LayoutParams loparams = (LinearLayout.LayoutParams) v.getLayoutParams();
// Set only target params:
loparams.height = 0;
loparams.weight = 1;
v.setLayoutParams(loparams);
TextView txtview = new TextView(v.getContext());
LayoutParams params = new LinearLayout.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
txtview.setLayoutParams(params);
1f est égal à poids = 1; vous pouvez donner 2f ou 3f, les vues se déplaceront selon l'espace
il suffit de définir les paramètres de mise en page dans cette mise en page comme
créer une variable param
Android.widget.LinearLayout.LayoutParams params = new Android.widget.LinearLayout.LayoutParams(
LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT, 1f);
1f est variable en poids
définir votre widget ou votre mise en page comme
TextView text = (TextView) findViewById(R.id.text);
text.setLayoutParams(params);
TextView text = new TextView(v.getContext());
text.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT, 1f));
(OU)
TextView tv = new TextView(v.getContext());
LayoutParams params = new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1f);
tv.setLayoutParams(params);
1f est désigné par le poids = 1; En fonction de vos besoins, vous pouvez donner 2f ou 3f, les vues bougent en fonction de l’espace. Pour définir la distance spécifiée entre les vues dans la présentation linéaire, utilisez poids total pour "LinearLayout".
LinearLayout ll_Outer= (LinearLayout ) view.findViewById(R.id.linearview);
LinearLayout llInner = new LinearLayout(this);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.FillParent, LinearLayout.LayoutParams.WrapContent);
llInner.Orientation = Orientation.Horizontal;
llInner.WeightSum = 2;
ll_Outer.AddView(llInner);
Vous pouvez aussi donner du poids séparément comme ça,
LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);
lp1.weight=1;
Cela devrait fonctionner pour vous
LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParams.MATCH_PARENT);
param.weight=1.0f;
Cela fonctionne pour moi et j'espère que cela fonctionnera pour vous également
Définissez d'abord les LayoutParams pour la vue parent:
myTableLayout.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.FILL_PARENT,
TableLayout.LayoutParams.FILL_PARENT));
puis défini pour le TextView (enfant):
TableLayout.LayoutParams textViewParam = new TableLayout.LayoutParams
(TableLayout.LayoutParams.WRAP_CONTENT,
TableLayout.LayoutParams.WRAP_CONTENT,1f);
//-- set components margins
textViewParam.setMargins(5, 0, 5,0);
myTextView.setLayoutParams(textViewParam);
Il y a une autre façon de faire cela. Si vous n’avez besoin que d’un paramètre, par exemple 'height':
TextView textView = (TextView)findViewById(R.id.text_view);
ViewGroup.LayoutParams params = textView.getLayoutParams();
params.height = ViewGroup.LayoutParams.WRAP_CONTENT;
textView.setLayoutParams(params);
Après avoir lutté pendant 4 heures. Enfin, ce code a fonctionné pour moi.
3 colonnes sont là dans une rangée.
TextView serialno = new TextView(UsersActivity.this);
TextView userId = new TextView(UsersActivity.this);
TextView name = new TextView(UsersActivity.this);
serialno.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
userId.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));
name.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT, 1f));