web-dev-qa-db-fra.com

Définir le poids de la présentation d'un TextView par programme

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.

205
eugene

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.

352
Macarse

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

94
Dorje

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);
37
sberezin
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

16
user5967758

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);
12
Manikandan
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);
11
anand krish

Vous pouvez aussi donner du poids séparément comme ça,

LayoutParams lp1 = new LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT);

 lp1.weight=1;
7
kiran boghra

Cela devrait fonctionner pour vous

LinearLayout.LayoutParams param = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT LayoutParams.MATCH_PARENT);

param.weight=1.0f;
7
Ashok Reddy M

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); 
6
Najem1234

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);
1
Dmitry

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));
0
Gulshan Yadav